videoAL Developmentcommunity - not Microsoftreviewed - checked by Opus

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.

  1. 0:00 Introduction and LinterCop background
  2. 1:46 Motivation for ALCops: identifying cracks in LinterCop
  3. 3:08 Problems with LinterCop: GitHub rate limits and scope creep
  4. 5:10 Design issues: rule domains and the Swiss Army knife problem
  5. 7:46 ALCops development timeline and LinterCop transition
  6. 9:51 LinterCop sunset: ending development and maintenance
  7. 12:01 Technical challenges with AL language version dependencies
  8. 13:46 Six-cop architecture: LinterCop, PlatformCop, and ApplicationCop
  9. 15:02 Test automation cop and design philosophy
  10. 17:31 Test validation rules and dialogue handling
  11. 18:49 Documentation cop and formatting cop structure
  12. 20:56 Application cop rules and architectural decisions
  13. 22:36 Severity levels and code fix implementation review
  14. 23:58 Code fixes expansion and rule description improvements
  15. 25:49 Migration documentation and LinterCop to ALCops transition
  16. 27:40 Migration strategy and avoiding breaking changes
  17. 29:45 Deeper analysis and rule behavior improvements
  18. 31:17 VS Code extension setup and configuration
  19. 32:35 MCP server integration and code fix automation
  20. 35:03 ALCops MCP server early stage status and capabilities
  21. 36:52 GitHub repository structure and NuGet package management
  22. 39:11 Severity levels and breaking pipeline prevention
  23. 40:28 Single Nougat package for all AL versions
  24. 42:00 Single-file solution using reflection for multi-version support
  25. 44:30 Nougat packaging and VS Code extension implementation
  26. 46:48 AL-Go helper, version detection, and pipeline configuration
  27. 48:36 Transfer fields rule improvements and community contributions
  28. 50:13 Dynamic transfer fields detection using code analysis
  29. 53:49 Transfer fields analysis across versions and localizations
  30. 57:18 Transfer fields analysis results and rule documentation
  31. 58:40 Try functions rule design and challenges
  32. 1:01:50 Community feedback and rule development process
  33. 1:03:23 LinterCop deprecation and migration timeline
  34. 1:06:53 Enum to option field conversion discussion
  35. 1:08:44 AL Cops rule for implicit conversion analysis
  36. 1:11:49 Design rationale for conversion warnings
  37. 1:13:46 Session closing and audience engagement
video Stefan Maron · 2026-02-28Watch on YouTube

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.