FpSonar - a pascal linter
Michael Van Canneyt via fpc-devel <[email protected]> Wed, 8 Jul 2026 22:14:06 +0200 (CEST)
| Newsgroups | gmane.comp.compilers.free-pascal.devel,gmane.comp.compilers.free-pascal.general,gmane.comp.ide.lazarus.general |
|---|---|
| Message-ID | <[email protected]> |
Hi, I've finished something I have been brooding on for some months now: FPSonar - a Object Pascal linter, written in Object Pascal What does it do? It has roughly 140-150 rules on how pascal code should be written to be readable. It parses your code (using fcl-passrc) and will check all these rules. It will then generate a report. Examples of checks: RoutineTooLarge - too long routines are flagged. TooManyParameters - Procedure takes too many parameters. TooManyNestedRoutines - too many local nested routines. RemoveUnusedConstant - there is a constant that is never used. FileNotTooManyClasses - too many classes in a file. FormatArgumentType - wrong type for Format() argument. LowercaseKeywords - keywords should be lowercase. Some of these the compiler will flag (or the IDE code observer), but most are not. There are many of them. You can configure these checks (how long is too long, what is too many parameters etc.) or disable checks altogether. The configuration file is a JSON file. You can also mark a line in code so it will not be checked: SomeCommand; // NOSONAR The NOSONAR comment will suppress any warnings about that line. The basic rule is: if the linter cannot determine with certainty that something is wrong, it will not report it. For example, if it cannot with certainty determine the type of a format argument, then no error/warning will be reported about a type mismatch. In order to do its job properly, it sometimes needs to know what the FPC units contain, and it automatically runs FPC's ppudump tool to find out - so it does not need to parse the FPC code (although it can also do the latter). In case you don't want that, you can let it simply use some built-in basic copies of some essential FPC units (system, sysutils, classes). To start using this tool on an old codebase can prove daunting - you can start out with many 1000's of 'errors'. In order to help with that you can make a baseline, a snapshot which you can compare against in subsequent runs so you at least don't make things worse. This gives you time to slowly fix the existing issues while ensuring you don't add new ones. I'm still working on a Lazarus IDE plugin. In case you were wondering about the name: it's a reference to SonarQube, a Java tool which does something similar (even for Pascal), but is 1000 times harder to use than fpSonar. If you find you're missing checks or have ideas for additional checks, feel free to contact me. if they can be implemented, I will look at it. Enjoy, Michael. _______________________________________________ fpc-devel maillist - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel