Re: [fpc-pascal] FpSonar - a pascal linter
Michael Van Canneyt via lazarus <[email protected]> Sun, 12 Jul 2026 11:08:44 +0200 (CEST)
| Newsgroups | gmane.comp.ide.lazarus.general,gmane.comp.compilers.free-pascal.general,gmane.comp.compilers.free-pascal.devel |
|---|---|
| Message-ID | <[email protected]> |
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-1757672342-1783847325=:1591808 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8BIT Hi, I published the fpsonar plugin for lazarus. https://gitlab.com/freepascal.org/fpsonar It also contains the command-line utility. The plugin/cli build with FPC 3.2.2 and FPC 3.3.1. I think the core engine and plugin are feature-complete as far as checking is concerned, but ideas for improvement or new rules are always welcome. I'll look into adding quick-fixes to the IDE plugin. Michael. On Thu, 9 Jul 2026, Michael Van Canneyt wrote: > > Sorry, I should have been more clear. This is part of fpc. > > So it's in gitlab: > > https://gitlab.com/freepascal.org/fpc/source/-/tree/main/utils/fpsonar > > The code compiles with FPC 3.2.2, though, I made sure of that. I'll see about > making a zip with just the fcl-passrc/sonar units, and report back. > > Michael. > > On Thu, 9 Jul 2026, Tim Coates via fpc-pascal wrote: > >> 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 >>> > --8323329-1757672342-1783847325=:1591808 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline -- _______________________________________________ lazarus mailing list [email protected] https://lists.lazarus-ide.org/listinfo/lazarus --8323329-1757672342-1783847325=:1591808--