Detailed explanation of Uncrustify configuration of C & C + + beautification tool
catalog:
1: Overview
2: Download
3: Installation
0: update Journal
2022 / 2 / 5 update: Chapter 3.3: use. Later, other usage methods will be updated and various ides may be used to use Uncrustify.
1: Overview
Due to the use of IDEA and pycharm in school, it's hard to use any editor now. The level is not up. Obsessive-compulsive disorder and various requirements are up. Now it's urgent to find a comfortable editor by yourself. It's really good to try atom before [([miscellaneous] win10 build atom+cpp environment)]( https://blog.csdn.net/qq_39949271/article/details/122143445?spm=1001.2014.3001.5502 )However, the problem is that atom is always stuck under windows, and there are limitations in configuration in many places. For example, UE4 can't use atom ~ ~ of course, you can use VS ~ ~. When doing projects, it's still difficult to configure because of your own dishes. So I decided to try something else. The use of VScode has never been used as a vegetable chicken this time. When I went in, I encountered the above technical problems ~ ~ people are addicted to vegetables and people are stupid and dull ~ ~. In this paper, the code is formatted by using Uncrustify tool to achieve the effect of beautification.2: Download
Uncrustify download is simple** Link * *:[ http://uncrustify.sourceforge.net/](http://uncrustify.sourceforge.net/ )You can find the link of SourceForge in Where to get below. Just click to download it. At the same time, you can also click in the address of GitHub project.
3: Installation
#####3.1: unzip your Uncrustify. Unzip your Uncrustify anywhere you like (if you unzip it to the package directory of atom, you will see it in the plug-in management). There will be a bin and a share document in it. Bin is the program we need, while share is some reference documents, configuration sharing, etc! [insert picture description here]( https://img-blog.csdnimg.cn/e2f70c23ed0a48f39ccff8c15736c3c6.png )####### 3.2: environment variable # configure environment variable path and add a bin directory of Uncrustify directory! [insert picture description here]( https://img-blog.csdnimg.cn/f66d591e4c034e849229d5f11b85ce37.png?x -oss-process=image/watermark,type_ d3F5LXplbmhlaQ,shadow_ 50,text_ Q1NETiBA54ix5YaS6Zmp55qEcc-AKHMsYSk=,size_ 20,color_ FFFFFF,t_ 70,g_ se,x_ 16) ####### 3.3: then you can use Uncrustify, and the configuration file will not be analyzed. It took an afternoon to change your configuration file. The template is in 'Uncrustify/share/doc/uncrustify/examples'. You can use these templates and change them yourself, or you can download my: [link: https://pan.baidu.com/s/1DlwaLpKqgXUHd4BxCq-aUA : ]( https://pan.baidu.com/s/1DlwaLpKqgXUHd4BxCq-aUA )Extraction code: nm5vAfter making the configuration file, put it where you like. Next, let's see how to use it. If you use qt or atom, they all have methods to load Uncrustify. Regardless of them here, let's start from the command line (we'll play in vscode, so it's convenient to see the directory tree and files).
Enter uncrustify on the command line and you will see its man page (you should see the following figure. If uncrustify is not an internal command, it is mostly an environmental variable problem):
The contents of the manual page are posted directly below:
PS G:\cProject\LearnOpenGL> uncrustify Usage: uncrustify.exe [options] [files ...] If no input files are specified, the input is read from stdin If reading from stdin, you should specify the language using -l or specify a filename using --assume for automatic language detection. If -F is used or files are specified on the command line, the output filename is 'prefix/filename' + suffix When reading from stdin or doing a single file via the '-f' option, the output is dumped to stdout, unless redirected with -o FILE. Errors are always dumped to stderr The '-f' and '-o' options may not be used with '-F' or '--replace'. The '--prefix' and '--suffix' options may not be used with '--replace'. Basic Options: -c CFG : Use the config file CFG, or defaults if CFG is set to '-'. -f FILE : Process the single file FILE (output to stdout, use with -o). -o FILE : Redirect stdout to FILE. -F FILE : Read files to process from FILE, one filename per line (- is stdin). --check : Do not output the new text, instead verify that nothing changes when the file(s) are processed. The status of every file is printed to stderr. The exit code is EXIT_SUCCESS if there were no changes, EXIT_FAILURE otherwise. files : Files to process (can be combined with -F). --suffix SFX : Append SFX to the output filename. The default is '.uncrustify' --prefix PFX : Prepend PFX to the output filename path. --replace : Replace source files (creates a backup). --no-backup : Do not create backup and md5 files. Useful if files are under source control. --if-changed : Write to stdout (or create output FILE) only if a change was detected. -l : Language override: C, CPP, D, CS, JAVA, PAWN, OC, OC+, VALA. -t : Load a file with types (usually not needed). -q : Quiet mode - no output on stderr (-L will override). --frag : Code fragment, assume the first line is indented correctly. --assume FN : Uses the filename FN for automatic language detection if reading from stdin unless -l is specified. Config/Help Options: -h -? --help --usage : Print this message and exit. --version : Print the version and exit. --count-options : Print the number of available options and exit. --show-config : Print out option documentation and exit. --update-config : Output a new config file. Use with -o FILE. --update-config-with-doc : Output a new config file. Use with -o FILE. --universalindent : Output a config file for Universal Indent GUI. --detect : Detects the config from a source file. Use with '-f FILE'. Detection is fairly limited. --set <option>=<value> : Sets a new value to a config option. Debug Options: -p FILE : Dump debug info into FILE, or to stdout if FILE is set to '-'. Must be used in combination with '-f FILE' -ds FILE : Dump parsing info at various moments of the formatting process. --dump-steps FILE This creates a series of files named 'FILE_nnn.log', each corresponding to a formatting step in uncrustify. The file 'FILE_000.log' lists the formatting options in use. Must be used in combination with '-f FILE' -L SEV : Set the log severity (see log_levels.h; note 'A' = 'all') -s : Show the log severity in the logs. --decode : Decode remaining args (chunk flags) and exit. --tracking_space FILE : Prepare tracking informations for debugging. Cannot be used with the -o option' Usage Examples cat foo.d | uncrustify -q -c my.cfg -l d uncrustify -c my.cfg -f foo.d uncrustify -c my.cfg -f foo.d -L0-2,20-23,51 uncrustify -c my.cfg -f foo.d -o foo.d uncrustify -c my.cfg -f foo.d -o foo.d -ds dump uncrustify -c my.cfg foo.d uncrustify -c my.cfg --replace foo.d uncrustify -c my.cfg --no-backup foo.d uncrustify -c my.cfg --prefix=out -F files.txt Note: Use comments containing ' *INDENT-OFF*' and ' *INDENT-ON*' to disable processing of parts of the source file (these can be overridden with enable_processing_cmt and disable_processing_cmt). There are currently 787 options and minimal documentation. Try UniversalIndentGUI and good luck.
We need to use the above configuration file to process a source file and get a formatted output. For example, the following figure is a program of my new toy glad, including opengl context and so on. It obviously adopts the style of aligning braces up and down, and only statements without parentheses after if and for. Of course, I liked this style when I first learned c, but I was forced to learn the annoying java because I reformed later, Decide to use the new style (see the formatted style later).
Then we call up terminal, and then enter the command uncritify - c configuration directory - f source file - O output file. The new file is shown in the left temp CPP (my command is uncrustify -c - F. \ SRC \ main.cpp - o. \ SRC \ temp.cpp because I have the default configuration, there is no directory parameter after - c):
It can be observed that the new file on the right has been formatted according to the configuration file (* * *. cgf) file adjusted the previous afternoon. Isn't it great?