<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>LinterCop on ALCops</title><link>https://alcops.dev/docs/analyzers/lintercop/</link><description>Recent content in LinterCop on ALCops</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://alcops.dev/docs/analyzers/lintercop/index.xml" rel="self" type="application/rss+xml"/><item><title>Do not use Object IDs as object references (LC0003)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0003/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0003/</guid><description>&lt;p&gt;When referencing objects in variable declarations, property values, built-in method invocations, or event subscriber attributes, use the object name instead of a numeric Object ID. Numeric IDs are not readable and cannot be safely renamed.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="examples"&gt;Examples&lt;/h3&gt;
&lt;h4 id="variable-declarations"&gt;Variable declarations&lt;/h4&gt;
&lt;p&gt;Using a numeric ID to reference an object in a variable declaration:&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;display:grid;"&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;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&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;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#3c3d38"&gt;&lt;span&gt; MyTable: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&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;p&gt;Use the object name instead:&lt;/p&gt;</description></item><item><title>Maintainability Index metric (LC0007)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0007/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0007/</guid><description>&lt;p&gt;This rule reports the calculated Maintainability Index for every procedure and trigger, allowing developers to identify areas that may benefit from refactoring. The companion rule &lt;a href="../lc0008/"&gt;LC0008&lt;/a&gt;
 triggers a warning when the index falls below a configurable threshold.&lt;/p&gt;
&lt;h3 id="what-is-the-maintainability-index"&gt;What is the Maintainability Index?&lt;/h3&gt;
&lt;p&gt;The Maintainability Index (MI) is a composite software metric that quantifies how easy a piece of code is to understand, modify, and maintain. It condenses several lower-level measurements into a single score on a &lt;strong&gt;0–100 scale&lt;/strong&gt;, where higher values indicate more maintainable code.&lt;/p&gt;</description></item><item><title>Maintainability Index threshold exceeded (LC0008)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0008/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0008/</guid><description>&lt;p&gt;This rule triggers when a procedure&amp;rsquo;s Maintainability Index falls at or below a configurable threshold. A low Maintainability Index indicates code that is likely difficult to understand, test, and maintain — and disproportionately expensive to change safely.&lt;/p&gt;
&lt;h3 id="what-triggers-this-diagnostic"&gt;What triggers this diagnostic?&lt;/h3&gt;
&lt;p&gt;The analyzer calculates the Maintainability Index for every procedure and trigger in your AL project. When the calculated score is &lt;strong&gt;at or below&lt;/strong&gt; the configured threshold, this diagnostic is reported on the procedure.&lt;/p&gt;</description></item><item><title>Cyclomatic Complexity metric (LC0009)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0009/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0009/</guid><description>&lt;p&gt;This rule reports the calculated Cyclomatic Complexity for every procedure and trigger, allowing developers to identify overly complex code. The companion rule &lt;a href="../lc0010/"&gt;LC0010&lt;/a&gt;
 triggers a warning when the complexity meets or exceeds a configurable threshold.&lt;/p&gt;
&lt;h3 id="what-is-cyclomatic-complexity"&gt;What is Cyclomatic Complexity?&lt;/h3&gt;
&lt;p&gt;Cyclomatic Complexity is a software metric that quantifies the number of linearly independent paths through a section of source code. It was introduced by Thomas J. McCabe Sr. in 1976 and has since become one of the most widely adopted complexity metrics in the software industry.&lt;/p&gt;</description></item><item><title>Cyclomatic Complexity threshold exceeded (LC0010)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0010/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0010/</guid><description>&lt;p&gt;This rule triggers when a procedure&amp;rsquo;s Cyclomatic Complexity meets or exceeds a configurable threshold. High complexity means more independent execution paths, making the code harder to understand, test exhaustively, and maintain safely.&lt;/p&gt;
&lt;h3 id="what-triggers-this-diagnostic"&gt;What triggers this diagnostic?&lt;/h3&gt;
&lt;p&gt;The analyzer calculates the Cyclomatic Complexity for every procedure and trigger in your AL project. When the calculated score is &lt;strong&gt;greater than or equal to&lt;/strong&gt; the configured threshold, this diagnostic is reported on the procedure.&lt;/p&gt;</description></item><item><title>DataClassification redundancy (LC0019)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0019/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0019/</guid><description>&lt;p&gt;The &lt;code&gt;DataClassification&lt;/code&gt; property set on a table automatically applies to all its fields. When individual fields repeat the same value that is already defined at the table level, the declaration is redundant.&lt;/p&gt;
&lt;p&gt;Redundant property declarations clutter the code with repeated lines that carry no additional meaning. They also increase the maintenance burden: if the table-level classification changes, every field that duplicates the old value must be updated individually. Over time this creates a risk that field-level values drift out of sync with the intended table-level default.&lt;/p&gt;</description></item><item><title>ApplicationArea redundancy (LC0020)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0020/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0020/</guid><description>&lt;p&gt;The &lt;code&gt;ApplicationArea&lt;/code&gt; property set on a page automatically applies to all its controls. When individual controls repeat the same value that is already defined at the page level, the declaration is redundant.&lt;/p&gt;
&lt;p&gt;Redundant property declarations clutter the code with repeated lines that carry no additional meaning. They also increase the maintenance burden: if the page-level application area changes, every control that duplicates the old value must be updated individually. Over time this creates a risk that control-level values drift out of sync with the intended page-level default.&lt;/p&gt;</description></item><item><title>Event subscriber arguments should use identifier syntax (LC0028)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0028/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0028/</guid><description>&lt;p&gt;Since Business Central 2023 wave 1 (BC22), event subscriber arguments support &lt;strong&gt;identifier syntax&lt;/strong&gt; instead of string literals. Using identifiers unlocks powerful Visual Studio Code navigation features such as Go To Definition, Go To References, tooltips, and CodeLens reference counts.&lt;/p&gt;
&lt;p&gt;This rule reports a diagnostic when event subscriber attribute parameters still use the old &lt;strong&gt;string literal&lt;/strong&gt; syntax (single quotes) instead of the new &lt;strong&gt;identifier&lt;/strong&gt; syntax.&lt;/p&gt;
&lt;h2 id="why-this-matters"&gt;Why this matters&lt;/h2&gt;
&lt;p&gt;When event subscriber arguments use string literals, the AL Language extension cannot resolve the reference. This means no navigability — you can&amp;rsquo;t jump to the event publisher, see who else subscribes, or get tooltips.&lt;/p&gt;</description></item><item><title>Use ReadIsolation instead of LockTable (LC0031)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0031/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0031/</guid><description>&lt;p&gt;This rule flags calls to &lt;code&gt;LockTable()&lt;/code&gt; and suggests replacing them with &lt;code&gt;ReadIsolation := IsolationLevel::UpdLock&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;While the change in code is small, the difference at the platform level is significant. &lt;code&gt;LockTable()&lt;/code&gt; modifies the &lt;strong&gt;global session state&lt;/strong&gt;: once called on any record variable, every subsequent read against that table — on &lt;em&gt;any&lt;/em&gt; variable instance — will acquire an update lock for the remainder of the transaction. This means an event subscriber, a FlowField calculation, or unrelated code further down the call stack can end up locking rows it never intended to touch.&lt;/p&gt;</description></item><item><title>App manifest runtime behind (LC0033)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0033/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0033/</guid><description>&lt;p&gt;The runtime version specified in app.json should be kept up to date with the target Business Central version. Using an outdated runtime version may prevent you from using newer AL language features and APIs.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;If your app.json specifies an old runtime:&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;runtime&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;10.0&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And you&amp;rsquo;re targeting a newer Business Central version, update the runtime to match:&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;runtime&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;14.0&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Explicitly set RunTrigger (LC0040)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0040/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0040/</guid><description>&lt;p&gt;When calling Insert, Modify, or Delete on a record, the RunTrigger parameter should be explicitly specified. Relying on the default value makes the code&amp;rsquo;s intent unclear and can lead to unexpected behavior.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code uses Insert without specifying RunTrigger:&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-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&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;procedure&lt;/span&gt; CreateRecord&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;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MyRecord: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; MyTable;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&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; MyRecord&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Init&lt;span style="color:#f92672"&gt;()&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MyRecord&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Insert&lt;span style="color:#f92672"&gt;()&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Explicitly set RunTrigger [LC0040]
&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;p&gt;To fix this, explicitly specify the RunTrigger parameter:&lt;/p&gt;</description></item><item><title>Use SecretText for sensitive text (LC0043)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0043/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0043/</guid><description>&lt;p&gt;Sensitive data such as passwords, API keys, and tokens should be stored in SecretText variables rather than plain Text variables. SecretText provides additional protection by preventing the value from being logged or displayed accidentally.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code stores a sensitive value in a plain Text variable:&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-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&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;procedure&lt;/span&gt; Authenticate&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;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ApiKey: &lt;span style="color:#66d9ef"&gt;Text&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Use SecretText for sensitive text [LC0043]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&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; ApiKey &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; GetApiKey&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:#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;p&gt;To fix this, use SecretText for sensitive values:&lt;/p&gt;</description></item><item><title>Error invocation using text constant (LC0048)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0048/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0048/</guid><description>&lt;p&gt;When calling Error() with a message, use a Label variable instead of a text constant. Labels support localization and provide better consistency across the codebase.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code uses a text constant in Error:&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-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&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;procedure&lt;/span&gt; ValidateAmount&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Amount: &lt;span style="color:#66d9ef"&gt;Decimal&lt;/span&gt;&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;if&lt;/span&gt; Amount &amp;lt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Error&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Amount cannot be negative&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Error invocation using text constant [LC0048]
&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;p&gt;To fix this, use a Label variable:&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-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&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;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; AmountCannotBeNegativeErr: &lt;span style="color:#66d9ef"&gt;Label&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;Amount cannot be negative&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;procedure&lt;/span&gt; ValidateAmount&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Amount: &lt;span style="color:#66d9ef"&gt;Decimal&lt;/span&gt;&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;if&lt;/span&gt; Amount &amp;lt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Error&lt;span style="color:#f92672"&gt;(&lt;/span&gt;AmountCannotBeNegativeErr&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:#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;</description></item><item><title>Internal procedure not referenced (LC0052)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0052/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0052/</guid><description>&lt;p&gt;An internal procedure that is never called from within the extension is dead code and should be removed. Unused internal procedures add maintenance burden and code noise.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following internal procedure is never referenced:&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-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&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;internal&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; UnusedHelper&lt;span style="color:#f92672"&gt;() &lt;/span&gt;&lt;span style="color:#75715e"&gt;// Internal procedure not referenced [LC0052]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&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;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; DoWork&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:#75715e"&gt;// UnusedHelper is never called
&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;p&gt;To fix this, either use the procedure or remove it:&lt;/p&gt;</description></item><item><title>Internal procedure only used in current object (LC0053)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0053/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0053/</guid><description>&lt;p&gt;When an internal procedure is only called from within the same object, it should be declared as local instead. This reduces the procedure&amp;rsquo;s visibility to the minimum required scope.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following internal procedure is only used within the same codeunit:&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-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&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;internal&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; Helper&lt;span style="color:#f92672"&gt;() &lt;/span&gt;&lt;span style="color:#75715e"&gt;// Internal procedure only used in current object [LC0053]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&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;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;procedure&lt;/span&gt; DoWork&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; Helper&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:#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;p&gt;To fix this, change the procedure to local:&lt;/p&gt;</description></item><item><title>Interface object name guide (LC0054)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0054/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0054/</guid><description>&lt;p&gt;Interface objects should follow naming conventions that clearly identify them as interfaces. This typically means using a prefix like &amp;ldquo;I&amp;rdquo; or a suffix that indicates the interface nature.&lt;/p&gt;
&lt;p&gt;Consistent naming makes it easier to identify interfaces at a glance and improves code readability.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following interface doesn&amp;rsquo;t follow naming conventions:&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-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;interface&lt;/span&gt; PaymentProcessor &lt;span style="color:#75715e"&gt;// Interface object name guide [LC0054]
&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;p&gt;To fix this, use a consistent naming convention:&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-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;interface&lt;/span&gt; IPaymentProcessor
&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;</description></item><item><title>API page canonical field name guide (LC0063)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0063/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0063/</guid><description>&lt;p&gt;API pages should use canonical field names that follow standard naming conventions for OData/REST APIs. This ensures consistency and improves discoverability for API consumers.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following API page uses non-canonical field names:&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-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;page&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; &amp;#34;My API Page&amp;#34;
&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; PageType = API;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; EntityName = &lt;span style="color:#e6db74"&gt;&amp;#39;customer&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; EntitySetName = &lt;span style="color:#e6db74"&gt;&amp;#39;customers&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;layout&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;area&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Content&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&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;field&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Customer_Name; Rec&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Name&lt;span style="color:#f92672"&gt;) &lt;/span&gt;&lt;span style="color:#75715e"&gt;// API page canonical field name guide [LC0063]
&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;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;p&gt;To fix this, use canonical field names:&lt;/p&gt;</description></item><item><title>Use IsEmpty method instead of Count (LC0081)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0081/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0081/</guid><description>&lt;p&gt;When checking if a recordset has any records, use &lt;code&gt;IsEmpty&lt;/code&gt; instead of comparing &lt;code&gt;Count&lt;/code&gt; to zero. The &lt;code&gt;IsEmpty&lt;/code&gt; method is more efficient because it stops after finding the first record, while &lt;code&gt;Count&lt;/code&gt; must enumerate all records.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code inefficiently uses Count to check for records:&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-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&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;procedure&lt;/span&gt; HasCustomers&lt;span style="color:#f92672"&gt;()&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;Boolean&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;var&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Customer: &lt;span style="color:#66d9ef"&gt;Record&lt;/span&gt; Customer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&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;exit&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Customer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;Count&lt;/span&gt;&lt;span style="color:#f92672"&gt;() &lt;/span&gt;&amp;gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Use IsEmpty method instead of Count [LC0081]
&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;p&gt;To fix this, use IsEmpty:&lt;/p&gt;</description></item><item><title>Use Query or Find with Next instead of Count (LC0082)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0082/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0082/</guid><description>&lt;p&gt;When you need to get the count of records that match complex criteria, consider using a Query object or iterating with FindSet/Next. In some scenarios, this can be more efficient than using Count, especially when filters are complex or when you need to process the records anyway.&lt;/p&gt;
&lt;h3 id="see-also"&gt;See also&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../lc0081/"&gt;LC0081&lt;/a&gt;
 - Use IsEmpty method instead of Count&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Use built-in date/time methods (LC0083)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0083/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0083/</guid><description>&lt;p&gt;Business Central provides built-in methods for common date and time operations. Use these methods instead of manually calculating dates or times, as they handle edge cases like leap years and month boundaries correctly.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code manually calculates the first day of the month:&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-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;codeunit&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyCodeunit
&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;procedure&lt;/span&gt; GetFirstDayOfMonth&lt;span style="color:#f92672"&gt;(&lt;/span&gt;InputDate: &lt;span style="color:#66d9ef"&gt;Date&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;Date&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&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;exit&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;DMY2Date&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, Date2DMY&lt;span style="color:#f92672"&gt;(&lt;/span&gt;InputDate, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;, Date2DMY&lt;span style="color:#f92672"&gt;(&lt;/span&gt;InputDate, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#f92672"&gt;)))&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Use built-in date/time methods [LC0083]
&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;p&gt;To fix this, use the built-in method:&lt;/p&gt;</description></item><item><title>Page style should not use string literal (LC0086)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0086/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0086/</guid><description>&lt;p&gt;When setting the Style property on page fields, use the Style enum values instead of string literals. Using enums provides compile-time validation and prevents typos.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following code uses a string literal for Style:&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-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;page&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyPage
&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;layout&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;area&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Content&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&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;field&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;Amount; Rec&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Amount&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&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Style = &lt;span style="color:#e6db74"&gt;&amp;#39;Strong&amp;#39;&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// Page style should not use string literal [LC0086]
&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;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To fix this, use the Style enum:&lt;/p&gt;</description></item><item><title>Option type should be Enum (LC0088)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0088/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0088/</guid><description>&lt;p&gt;The Option data type is a legacy construct. For new development, use Enum types instead. Enums are extensible, provide better IntelliSense support, and allow for cleaner code patterns.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following field uses an Option type:&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-al" data-lang="al"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;table&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyTable
&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;fields&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;field&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;; Status; &lt;span style="color:#66d9ef"&gt;Option&lt;/span&gt;&lt;span style="color:#f92672"&gt;) &lt;/span&gt;&lt;span style="color:#75715e"&gt;// Option type should be Enum [LC0088]
&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; OptionMembers = Open,Closed,Pending;
&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;p&gt;To fix this, create an Enum and use it instead:&lt;/p&gt;</description></item><item><title>Cognitive Complexity metric (LC0089)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0089/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0089/</guid><description>&lt;p&gt;Cognitive Complexity measures how difficult code is to understand, as opposed to how difficult it is to execute (Cyclomatic Complexity). It takes into account nesting depth, break in linear flow, and structural complexity.&lt;/p&gt;
&lt;p&gt;This rule reports the calculated Cognitive Complexity for procedures, allowing developers to identify code that may be hard to understand and maintain.&lt;/p&gt;
&lt;h3 id="see-also"&gt;See also&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../lc0090/"&gt;LC0090&lt;/a&gt;
 - Cognitive Complexity threshold exceeded&lt;/li&gt;
&lt;li&gt;&lt;a href="../lc0009/"&gt;LC0009&lt;/a&gt;
 - Cyclomatic Complexity metric&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Cognitive Complexity threshold exceeded (LC0090)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0090/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0090/</guid><description>&lt;p&gt;This rule triggers when a procedure&amp;rsquo;s Cognitive Complexity exceeds a configurable threshold. High cognitive complexity indicates code that is difficult to understand and reason about.&lt;/p&gt;
&lt;p&gt;Consider refactoring complex procedures by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Extracting nested logic into well-named helper methods&lt;/li&gt;
&lt;li&gt;Using early returns to reduce nesting&lt;/li&gt;
&lt;li&gt;Simplifying conditional logic&lt;/li&gt;
&lt;li&gt;Breaking down complex procedures into smaller, focused units&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="see-also"&gt;See also&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="../lc0089/"&gt;LC0089&lt;/a&gt;
 - Cognitive Complexity metric&lt;/li&gt;
&lt;li&gt;&lt;a href="../lc0010/"&gt;LC0010&lt;/a&gt;
 - Cyclomatic Complexity threshold exceeded&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>AllowInCustomizations redundancy (LC0094)</title><link>https://alcops.dev/docs/analyzers/lintercop/lc0094/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://alcops.dev/docs/analyzers/lintercop/lc0094/</guid><description>&lt;p&gt;When a table or tableextension defines &lt;code&gt;AllowInCustomizations&lt;/code&gt; at the object level, individual fields do not need to repeat the same value. Redundant &lt;code&gt;AllowInCustomizations&lt;/code&gt; properties on fields add noise without providing additional value.&lt;/p&gt;
&lt;p&gt;A code fix is available for this diagnostic.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The following field redundantly specifies the same &lt;code&gt;AllowInCustomizations&lt;/code&gt; as the table:&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;display:grid;"&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;table&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50100&lt;/span&gt; MyTable
&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; AllowInCustomizations = Never;
&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;fields&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;field&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;; MyField; &lt;span style="color:#66d9ef"&gt;Integer&lt;/span&gt;&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&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#3c3d38"&gt;&lt;span&gt; AllowInCustomizations = Never;
&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;p&gt;To fix this, remove the redundant property from the field:&lt;/p&gt;</description></item></channel></rss>