Annotation of embedaddon/curl/docs/CHECKSRC.md, revision 1.1
1.1 ! misho 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.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>