Hi Michael, Link please? I'd love to try it out.
Tim On Thu, 9 July 2026, 6:22 am Michael Van Canneyt via fpc-pascal, < [email protected]> wrote: > > 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-pascal maillist - [email protected] > https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal >
_______________________________________________ fpc-pascal maillist - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
