Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/thirdparty/curl/docs/CHECKSRC.md @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 # checksrc | |
| 2 | |
| 3 This is the tool we use within the curl project to scan C source code and | |
| 4 check that it adheres to our [Source Code Style guide](CODE_STYLE.md). | |
| 5 | |
| 6 ## Usage | |
| 7 | |
| 8 checksrc.pl [options] [file1] [file2] ... | |
| 9 | |
| 10 ## Command line options | |
| 11 | |
| 12 `-W[file]` whitelists that file and excludes it from being checked. Helpful | |
| 13 when, for example, one of the files is generated. | |
| 14 | |
| 15 `-D[dir]` directory name to prepend to file names when accessing them. | |
| 16 | |
| 17 `-h` shows the help output, that also lists all recognized warnings | |
| 18 | |
| 19 ## What does checksrc warn for? | |
| 20 | |
| 21 checksrc does not check and verify the code against the entire style guide, | |
| 22 but the script is instead an effort to detect the most common mistakes and | |
| 23 syntax mistakes that contributors make before they get accustomed to our code | |
| 24 style. Heck, many of us regulars do the mistakes too and this script helps us | |
| 25 keep the code in shape. | |
| 26 | |
| 27 checksrc.pl -h | |
| 28 | |
| 29 Lists how to use the script and it lists all existing warnings it has and | |
| 30 problems it detects. At the time of this writing, the existing checksrc | |
| 31 warnings are: | |
| 32 | |
| 33 - `ASSIGNWITHINCONDITION`: Assignment within a conditional expression. The | |
| 34 code style mandates the assignment to be done outside of it. | |
| 35 | |
| 36 - `ASTERISKNOSPACE`: A pointer was declared like `char* name` instead of the more | |
| 37 appropriate `char *name` style. The asterisk should sit next to the name. | |
| 38 | |
| 39 - `ASTERISKSPACE`: A pointer was declared like `char * name` instead of the | |
| 40 more appropriate `char *name` style. The asterisk should sit right next to | |
| 41 the name without a space in between. | |
| 42 | |
| 43 - `BADCOMMAND`: There's a bad !checksrc! instruction in the code. See the | |
| 44 **Ignore certain warnings** section below for details. | |
| 45 | |
| 46 - `BANNEDFUNC`: A banned function was used. The functions sprintf, vsprintf, | |
| 47 strcat, strncat, gets are **never** allowed in curl source code. | |
| 48 | |
| 49 - `BRACEELSE`: '} else' on the same line. The else is supposed to be on the | |
| 50 following line. | |
| 51 | |
| 52 - `BRACEPOS`: wrong position for an open brace (`{`). | |
| 53 | |
| 54 - `COMMANOSPACE`: a comma without following space | |
| 55 | |
| 56 - `COPYRIGHT`: the file is missing a copyright statement! | |
| 57 | |
| 58 - `CPPCOMMENTS`: `//` comment detected, that's not C89 compliant | |
| 59 | |
| 60 - `FOPENMODE`: `fopen()` needs a macro for the mode string, use it | |
| 61 | |
| 62 - `INDENTATION`: detected a wrong start column for code. Note that this | |
| 63 warning only checks some specific places and will certainly miss many bad | |
| 64 indentations. | |
| 65 | |
| 66 - `LONGLINE`: A line is longer than 79 columns. | |
| 67 | |
| 68 - `MULTISPACE`: Multiple spaces were found where only one should be used. | |
| 69 | |
| 70 - `NOSPACEEQUALS`: An equals sign was found without preceding space. We prefer | |
| 71 `a = 2` and *not* `a=2`. | |
| 72 | |
| 73 - `OPENCOMMENT`: File ended with a comment (`/*`) still "open". | |
| 74 | |
| 75 - `PARENBRACE`: `){` was used without sufficient space in between. | |
| 76 | |
| 77 - `RETURNNOSPACE`: `return` was used without space between the keyword and the | |
| 78 following value. | |
| 79 | |
| 80 - `SEMINOSPACE`: There was no space (or newline) following a semicolon. | |
| 81 | |
| 82 - `SIZEOFNOPAREN`: Found use of sizeof without parentheses. We prefer | |
| 83 `sizeof(int)` style. | |
| 84 | |
| 85 - `SNPRINTF` - Found use of `snprintf()`. Since we use an internal replacement | |
| 86 with a different return code etc, we prefer `msnprintf()`. | |
| 87 | |
| 88 - `SPACEAFTERPAREN`: there was a space after open parenthesis, `( text`. | |
| 89 | |
| 90 - `SPACEBEFORECLOSE`: there was a space before a close parenthesis, `text )`. | |
| 91 | |
| 92 - `SPACEBEFORECOMMA`: there was a space before a comma, `one , two`. | |
| 93 | |
| 94 - `SPACEBEFOREPAREN`: there was a space before an open parenthesis, `if (`, | |
| 95 where one was not expected | |
| 96 | |
| 97 - `SPACESEMICOLON`: there was a space before semicolon, ` ;`. | |
| 98 | |
| 99 - `TABS`: TAB characters are not allowed! | |
| 100 | |
| 101 - `TRAILINGSPACE`: Trailing white space on the line | |
| 102 | |
| 103 - `UNUSEDIGNORE`: a checksrc inlined warning ignore was asked for but not used, | |
| 104 that's an ignore that should be removed or changed to get used. | |
| 105 | |
| 106 ### Extended warnings | |
| 107 | |
| 108 Some warnings are quite computationally expensive to perform, so they are | |
| 109 turned off by default. To enable these warnings, place a `.checksrc` file in | |
| 110 the directory where they should be activated with commands to enable the | |
| 111 warnings you are interested in. The format of the file is to enable one | |
| 112 warning per line like so: `enable <EXTENDEDWARNING>` | |
| 113 | |
| 114 Currently there is one extended warning which can be enabled: | |
| 115 | |
| 116 - `COPYRIGHTYEAR`: the current changeset hasn't updated the copyright year in | |
| 117 the source file | |
| 118 | |
| 119 ## Ignore certain warnings | |
| 120 | |
| 121 Due to the nature of the source code and the flaws of the checksrc tool, there | |
| 122 is sometimes a need to ignore specific warnings. checksrc allows a few | |
| 123 different ways to do this. | |
| 124 | |
| 125 ### Inline ignore | |
| 126 | |
| 127 You can control what to ignore within a specific source file by providing | |
| 128 instructions to checksrc in the source code itself. You need a magic marker | |
| 129 that is `!checksrc!` followed by the instruction. The instruction can ask to | |
| 130 ignore a specific warning N number of times or you ignore all of them until | |
| 131 you mark the end of the ignored section. | |
| 132 | |
| 133 Inline ignores are only done for that single specific source code file. | |
| 134 | |
| 135 Example | |
| 136 | |
| 137 /* !checksrc! disable LONGLINE all */ | |
| 138 | |
| 139 This will ignore the warning for overly long lines until it is re-enabled with: | |
| 140 | |
| 141 /* !checksrc! enable LONGLINE */ | |
| 142 | |
| 143 If the enabling isn't performed before the end of the file, it will be enabled | |
| 144 automatically for the next file. | |
| 145 | |
| 146 You can also opt to ignore just N violations so that if you have a single long | |
| 147 line you just can't shorten and is agreed to be fine anyway: | |
| 148 | |
| 149 /* !checksrc! disable LONGLINE 1 */ | |
| 150 | |
| 151 ... and the warning for long lines will be enabled again automatically after | |
| 152 it has ignored that single warning. The number `1` can of course be changed to | |
| 153 any other integer number. It can be used to make sure only the exact intended | |
| 154 instances are ignored and nothing extra. | |
| 155 | |
| 156 ### Directory wide ignore patterns | |
| 157 | |
| 158 This is a method we've transitioned away from. Use inline ignores as far as | |
| 159 possible. | |
| 160 | |
| 161 Make a `checksrc.whitelist` file in the directory of the source code with the | |
| 162 false positive, and include the full offending line into this file. |
