<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Getting Started on ALCops</title><link>https://alcops.dev/docs/getting-started/</link><description>Recent content in Getting Started on ALCops</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://alcops.dev/docs/getting-started/index.xml" rel="self" type="application/rss+xml"/><item><title>Quick Start</title><link>https://alcops.dev/docs/getting-started/quick-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/getting-started/quick-start/</guid><description>&lt;p&gt;ALCops is a community-driven collection of code analyzers for the AL programming language. It catches common mistakes, enforces best practices, and helps maintain consistent code quality across your Business Central projects.&lt;/p&gt;
&lt;h2 id="what-alcops-catches"&gt;What ALCops Catches&lt;/h2&gt;
&lt;p&gt;Here is a small sample of what ALCops detects. Browse the full &lt;a href="../../analyzers/"&gt;rules reference&lt;/a&gt;
 for the complete list.&lt;/p&gt;
&lt;h3 id="missing-caption-on-user-facing-controls-ac0011"&gt;Missing Caption on user-facing controls (AC0011)&lt;/h3&gt;
&lt;p&gt;User-facing controls need explicit captions for a consistent and localizable UI.&lt;/p&gt;



&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist"&gt;
 &lt;li class="nav-item"&gt;
 &lt;button class="nav-link active"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 aria-controls="tabs-00-00" aria-selected="true"&gt;
 Before
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 aria-controls="tabs-00-01" aria-selected="false"&gt;
 After
 &lt;/button&gt;
 &lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tab-content" id="tabs-0-content"&gt;
 &lt;div class="tab-pane fade show active"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;action&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;MyAction&lt;span style="color:#f92672"&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;trigger&lt;/span&gt; OnAction&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-pane fade"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;action&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;MyAction&lt;span style="color:#f92672"&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Caption = &lt;span style="color:#e6db74"&gt;&amp;#39;My Action&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;trigger&lt;/span&gt; OnAction&lt;span style="color:#f92672"&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt; &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;h3 id="primary-key-field-missing-notblank-ac0002"&gt;Primary key field missing NotBlank (AC0002)&lt;/h3&gt;
&lt;p&gt;Single-field primary keys of type Code or Text must set &lt;code&gt;NotBlank&lt;/code&gt; to prevent empty key values.&lt;/p&gt;</description></item><item><title>VS Code</title><link>https://alcops.dev/docs/getting-started/vscode/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/getting-started/vscode/</guid><description>&lt;p&gt;The ALCops VS Code extension is the recommended way to use ALCops during development. It automatically downloads and manages the analyzer DLLs for you.&lt;/p&gt;
&lt;h2 id="install-the-extension"&gt;Install the Extension&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Open VS Code and go to the Extensions view (&lt;code&gt;Ctrl+Shift+X&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;ALCops&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Install&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Alternatively, install from the command line:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;code --install-extension Arthurvdv.alcops
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once installed, the extension activates automatically when you open an AL project. It downloads the analyzer DLLs to the AL Language extension&amp;rsquo;s &lt;code&gt;bin/Analyzers&lt;/code&gt; folder on first use.&lt;/p&gt;</description></item><item><title>Command Line</title><link>https://alcops.dev/docs/getting-started/command-line/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/getting-started/command-line/</guid><description>&lt;p&gt;ALCops analyzers work with the AL compiler (alc.exe) through the standard &lt;code&gt;/analyzer&lt;/code&gt; flag. This is the foundation that all other integration methods build on.&lt;/p&gt;
&lt;h2 id="al-compiler-alcexe"&gt;AL Compiler (alc.exe)&lt;/h2&gt;
&lt;p&gt;Pass one or more analyzer DLLs to the compiler using the &lt;code&gt;/analyzer&lt;/code&gt; flag:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-PowerShell" data-lang="PowerShell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;alc.exe /project&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;C:\Source\MyApp&amp;#34;&lt;/span&gt; /packagecachepath&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;C:\Source\MyApp\.alpackages&amp;#34;&lt;/span&gt; /analyzer&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;C:\Analyzers\ALCops.ApplicationCop.dll&amp;#34;&lt;/span&gt; /analyzer&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;C:\Analyzers\ALCops.PlatformCop.dll&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each &lt;code&gt;/analyzer&lt;/code&gt; flag accepts a full path to a single DLL. Repeat the flag for each analyzer you want to include.&lt;/p&gt;
&lt;div class="alert alert-primary" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Important&lt;/div&gt;
&lt;p&gt;When running from the command line, you must also include &lt;code&gt;ALCops.Common.dll&lt;/code&gt; in the &lt;code&gt;customCodeCops&lt;/code&gt; array. This shared dependency is required by all ALCops analyzers.&lt;/p&gt;</description></item><item><title>Configuration</title><link>https://alcops.dev/docs/getting-started/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/getting-started/configuration/</guid><description>&lt;p&gt;ALCops supports several mechanisms to configure which rules are active and how they behave. These mechanisms work across all environments: VS Code, command line, and CI/CD pipelines.&lt;/p&gt;
&lt;h2 id="alcopsjson"&gt;ALCops.json&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;ALCops.json&lt;/code&gt; file provides analyzer-specific configuration. Place it in the root of your AL project alongside &lt;code&gt;app.json&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;analyzers&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;ApplicationCop&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;LinterCop&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="alert alert-primary" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Note&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;ALCops.json&lt;/code&gt; file is read when the analyzer loads. In VS Code, changes to this file require reloading the window (&lt;code&gt;Ctrl+Shift+P&lt;/code&gt; → &lt;strong&gt;Developer: Reload Window&lt;/strong&gt;) to take effect.&lt;/p&gt;</description></item><item><title>MCP Server</title><link>https://alcops.dev/docs/getting-started/ai-tooling/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/getting-started/ai-tooling/</guid><description>&lt;p&gt;The &lt;a href="https://github.com/ALCops/mcp-server"&gt;ALCops MCP server&lt;/a&gt;
 brings AL code analysis to AI assistants through the &lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol&lt;/a&gt;
. It lets Claude, Cursor, and other MCP-compatible clients analyze Business Central AL projects, browse rules, and apply code fixes — all without leaving the conversation.&lt;/p&gt;
&lt;h2 id="install"&gt;Install&lt;/h2&gt;
&lt;p&gt;Install the MCP server as a .NET global tool:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dotnet tool install -g ALCops.Mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Add the server to your MCP client configuration.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;alcops&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;alcops-mcp&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="available-tools"&gt;Available Tools&lt;/h2&gt;
&lt;p&gt;The MCP server exposes 4 tools (~1,020 tokens of schema overhead):&lt;/p&gt;</description></item></channel></rss>