ALCops: LinterCop's Successor for Business Central AL Code Analysis (feat Arthur van de Vondervoort)
ALCops is the successor to LinterCop for AL code analysis in Business Central, split into six cops (including PlatformCop, ApplicationCop, Test Automation, Documentation, Formatting). The video covers why LinterCop is deprecated, migration, NuGet distribution, the VS Code extension and an early 0.1 alpha MCP server.
- Introduction and LinterCop background
- Motivation for ALCops: identifying cracks in LinterCop
- Problems with LinterCop: GitHub rate limits and scope creep
- Design issues: rule domains and the Swiss Army knife problem
- ALCops development timeline and LinterCop transition
- LinterCop sunset: ending development and maintenance
- Technical challenges with AL language version dependencies
- Six-cop architecture: LinterCop, PlatformCop, and ApplicationCop
- Test automation cop and design philosophy
- Test validation rules and dialogue handling
- Documentation cop and formatting cop structure
- Application cop rules and architectural decisions
- Severity levels and code fix implementation review
- Code fixes expansion and rule description improvements
- Migration documentation and LinterCop to ALCops transition
- Migration strategy and avoiding breaking changes
- Deeper analysis and rule behavior improvements
- VS Code extension setup and configuration
- MCP server integration and code fix automation
- ALCops MCP server early stage status and capabilities
- GitHub repository structure and NuGet package management
- Severity levels and breaking pipeline prevention
- Single Nougat package for all AL versions
- Single-file solution using reflection for multi-version support
- Nougat packaging and VS Code extension implementation
- AL-Go helper, version detection, and pipeline configuration
- Transfer fields rule improvements and community contributions
- Dynamic transfer fields detection using code analysis
- Transfer fields analysis across versions and localizations
- Transfer fields analysis results and rule documentation
- Try functions rule design and challenges
- Community feedback and rule development process
- LinterCop deprecation and migration timeline
- Enum to option field conversion discussion
- AL Cops rule for implicit conversion analysis
- Design rationale for conversion warnings
- Session closing and audience engagement
Overview
Arthur van de Vondervoort explains why he moved from LinterCop to ALCops. The reasons given are GitHub rate limits that broke DLL downloads in pipelines since May 2025, AL 16.4 version compatibility problems, and a design that had grown into a “Swiss Army knife”. LinterCop now only covers code quality, and its repository is deprecated with no new rules planned.
The session shows the six-cop structure, expanded code fixes (about 30 rules), rewritten rule descriptions aimed at AI agents, and a migration guide. It also covers NuGet distribution with semantic versioning, a single package for all AL versions, an AL-Go helper, a dynamic transfer fields analyzer, and the MCP server. The speaker states that ALCops was released that week and may contain bugs.
Key points
- LinterCop problems named: since around May 2025 GitHub limited unauthenticated requests to about 60 per hour per public IP, breaking DLL downloads in DevOps pipelines; missing AL 16.4 support (marketplace only had 16.3, dev tools NuGet 16.2) was also an issue.
- ALCops splits analysis into six cops (LinterCop, PlatformCop, ApplicationCop, Test Automation, Documentation, Formatting); LinterCop is kept inside it but trimmed to code quality only.
- The Test Automation cop exists as a separate cop, but test automation rules are not implemented yet and are on the backlog (e.g. validating confirm dialog content).
- LinterCop and ALCops cannot run together in VS Code because they share diagnostic IDs; disable LinterCop to use ALCops.
- Expect new warnings after migrating: ALCops analyzes deeper, and the migration guide covers about 95 percent of the rules. Try it locally in VS Code before switching pipelines.
- Distribution is via NuGet with semantic versioning, so pipelines can pin a version. One package works across AL versions sharing a .NET target using reflection, and an AL-Go helper fetches the right feed (defaults to .NET 8 for AL 16.0+).
- Code fixes grew from about five or six to 30 rules. The MCP server is at 0.1 alpha and applies Microsoft quick fixes programmatically; a 1.0 may follow after a couple of weeks of fine tuning.
Features
| Feature | Status | At |
|---|---|---|
| ALCops | status not stated, demoed | 2:00 |
| LinterCop | status not stated | 0:59 |
| Platform Cop | status not stated, demoed | 13:46 |
| AL language version compatibility | status not stated, demoed | 12:22 |
| LinterCop trimmed down | status not stated, demoed | 14:07 |
| Test Automation Cop | status not stated | 15:22 |
| Test dialogue validation rules | status not stated | 17:31 |
| Documentation Cop | status not stated, demoed | 18:49 |
| Formatting Cop | status not stated, demoed | 18:49 |
| ApplicationCop | status not stated, demoed | 15:02 |
| Comprehensive rule review and severity adjustment | status not stated | 22:09 |
| Expanded code fix implementation | status not stated, demoed | 23:58 |
| Improved rule descriptions for AI agents | status not stated | 25:20 |
| AI-assisted rule development approach | status not stated | 25:49 |
| LinterCop to ALCops migration documentation | status not stated, demoed | 27:28 |
| ALCops deeper rule analysis | status not stated, demoed | 29:17 |
| ALCops VS Code extension | status not stated, demoed | 31:17 |
| ALCops MCP server | status not stated, demoed | 32:35 |
| ALCops MCP quick fix automation | status not stated | 35:03 |
| ALCops NuGet package distribution | status not stated, demoed | 37:50 |
| ALCops semantic versioning | status not stated, demoed | 38:39 |
| Severity level configuration for new rules | status not stated | 39:11 |
| Single Nougat package for multiple AL versions | status not stated, demoed | 42:00 |
| AL language version as primary driver | status not stated, demoed | 43:08 |
| AL-Go helper for Nougat package installation | status not stated, demoed | 46:48 |
| Dynamic transfer fields rule detection | status not stated, demoed | 50:13 |
| Transfer fields rule improvements | status not stated, demoed | 55:03 |
| Try functions rule | status not stated | 58:23 |
| LinterCop deprecation | status not stated | 1:04:35 |
| Linter Cop Maintenance and Support Window | status not stated | 1:05:08 |
| AL Cops Implicit Conversion Validation Rule | status not stated, demoed | 1:09:18 |
| AL Cops Conversion Diagnostic for Error Prevention | status not stated, demoed | 1:10:39 |
AL objects mentioned
As heard in the captions. A name that matches one object page by exact type and name links to it; the others stay as named.
- other “ALCops” at 13:46
- other “LinterCop” at 14:07
- other “PlatformCop” at 14:36
- other “ApplicationCop” at 15:02
- other “Test Automation Cop” at 15:22
- other “Documentation Cop” at 18:49
- other “Formatting Cop” at 18:49
- other “MCP server” at 33:05
- other “AL cups extension” at 31:28
- other “account scheduling” at 53:29
- other “result line” at 53:29
- table “Object table” at 1:09:52
- other “shipment line” at 1:07:55
- other “sales line” at 1:07:55
- other “purchase lines” at 1:07:55
Not found in BC28-30: table “Object table”.
Quotes
- 1:22 “we’re almost at the 100. I think we’re now at like 90 95 rules somethingish”
- 2:10 “that started around I think 3 months, four months agoish. um that I saw some some things I wanted to change and I saw”
- 2:54 “that’s called AL Cops. Um that’s the the uh growing further from from the business central club you’ve started”
- 3:56 “In May of 2025 um GitHub updated the rate limits for and uh important part unauthorized request”
- 4:29 “I think they uh get it back to like 60 requests per hour per public IP.”
Disclaimers in the video
- 9:51 other: we’re not going to do any more development on on this
- 17:20 coming-later: It’s on my backlog to to develop in test automation cop rules
- 18:14 not-in-this-release: There isn’t a rule currently today that will help you get a warning or a diagnostic for test dialogue validation
- 30:17 preview: I released it this week maybe should be some bugs I didn’t uh find as of today
- 30:37 preview: so jumping today is is uh could be of course but is is quite uh could be quite an an …
- 34:49 subject-to-change: that’s yeah still the subject for for testing and probably improvement
- 36:32 preview: this is brand new. We just delivered it a few days ago. So um it’s also in an early stage
- 39:41 preview: MCP server is currently at 0.1 alpha
- 40:01 coming-later: Version 1.0 expected in next couple weeks after fine tuning
- 47:35 subject-to-change: Not ready as of today for some pipeline tools, hoping in next couple weeks or something maybe first draft
- 58:40 coming-later: Currently no rule in place for try functions but the idea was there in business central interop already
- 1:04:54 subject-to-change: LinterCop currently on life support with uncertain timeframe for continued support
- 1:05:41 subject-to-change: I’m not sure how longer I see all those like at the beginning I said I see all the crack …
- 1:06:42 not-in-this-release: The repos itself is deprecated. So it won’t receive any new new updates anymore
- 1:06:42 subject-to-change: there probably won’t be any new rules on the llinter anymore. Right. Correct. So um that was also the deprecation
Presenters (as heard): Arthur van de Vondervoort, Luke, Moderator.
