BusinessCentral.LinterCop icon indicating copy to clipboard operation
BusinessCentral.LinterCop copied to clipboard

Performance of LC0005, pt. 2

Open jwikman opened this issue 3 weeks ago • 0 comments

In #284 a lot was done to improve performance of LC0005 (and others). The time spent on LC0005 went down from 62% to 11%, which was quite impressive!

But now the time this rule consumes has increased a lot, and about 50% of the time is spent on this rule.

I do not know when this happened, though...

Any ideas why this happened?

Total analyzer execution time: 61.852 seconds
NOTE: Elapsed time may be less than analyzer execution time because analyzers can run concurrently

Time (s)    %   Analyzer (Related Diagnostics)
  39.042   63   LinterCop
  32.969   53      Variable Casing Should Not Differ From Declaration (LC0005, LC0000) <---------- about 10 times more time than before
   2.234    3      Code Metrics (LC0009, LC0010)
   0.988    1      Do Not Use Object Id In System Functions (LC0012)
   0.838    1      Avoid Option Types (LC0088)
   0.395   <1      Auto Calc Fields On Normal Fields (LC0042)
   0.233   <1      Explicit Set Allow In Customizations (LC0035)
   0.145   <1      Analyze Transfer Fields (LC0044, LC0000)
   0.113   <1      Secret Text (LC0043)
   0.084   <1      Tool Tip Punctuation (LC0026, LC0036, LC0037, LC0038)
   0.080   <1      Check For Missing Captions (LC0016)
   0.078   <1      Do Not Set Is Handled To False (LC0071)
   0.067   <1      Check Event Subscriber Var Keyword (LC0065)
   0.065   <1      Do Not Use Object IDs In Variables Or Properties (LC0003, LC0005)
   0.048   <1      Possible Overflow Assigning (LC0051)
   0.048   <1      No Events In Internal Codeunits (LC0018)
   0.048   <1      Record Get Procedure Arguments (LC0075)
   0.046   <1      Use Table Field Tool Tip (LC0064, LC0066)
   0.042   <1      Code Navigability On Event Subscribers (LC0028)
   0.037   <1      Check Procedure Documentation Comment (LC0072)
   0.035   <1      Argument Different Type Then Expected (LC0039, LC0049, LC0058)
   0.029   <1      Semicolon After Method Or Trigger Declaration (LC0024)
   0.025   <1      Clear Codeunit Single Instance (LC0032, LC0000)
   0.023   <1      Temporary Records Should Not Trigger Table Triggers (LC0078)
   0.023   <1      Empty Caption Locked (LC0041)
   0.021   <1      Commit Must Be Explained By Comment (LC0002)
   0.021   <1      Missing Parenthesis (LC0077)
   0.020   <1      Write To Flow Field (LC0017, LC0000)
   0.019   <1      Single Quote Escaping (LC0050, LC0059, LC0000)
   0.019   <1      Locked Tok Labels (LC0046, LC0047)
   0.019   <1      Operator And Placeholder In Filter Expression (LC0050, LC0059)
   0.018   <1      Run Page Implement Page Management (LC0027)
   0.018   <1      Built In Method Implement Through Codeunit (LC0021, LC0022)
   0.017   <1      No Filter Operators In Set Range (LC0008)
   0.015   <1      Record Instance Isolation Level (LC0031)
   0.015   <1      Extensible Property Should Always Be Set (LC0034)
   0.015   <1      Non Public Event Publisher (LC0079)
   0.015   <1      Analyze Count Method (LC0081, LC0082)
   0.012   <1      Data Classification Field Equals Table (LC0019)
   0.011   <1      Application Area Equals To Page (LC0020)
   0.011   <1      Tok Suffix For Token Labels (LC0055)
   0.010   <1      Flow Fields Should Not Be Editable (LC0001)
   0.009   <1      Flow Filter Assignment (LC0074)
   0.008   <1      List Objects Are One Based (LC0070)
   0.006   <1      Event Publisher Is Handled By Var (LC0073)
   0.006   <1      Internal Procedure Modifier (LC0025)
   0.006   <1      Analyze Json Token JPath (LC0080)
   0.005   <1      Table Relation Too Long (LC0076)
   0.005   <1      Data Per Company Should Always Be Set (LC0011)
   0.004   <1      Compare Date Time Through Codeunit (LC0029)
   0.003   <1      LFSeparator (LC0085)
   0.003   <1      Always Specify Fieldgroups (LC0023)
   0.003   <1      Use Is Null Guid (LC0087)
   0.002   <1      Field Not Auto Increment In Temporary Table (LC0006)
   0.001   <1      Zero Enum Value Reserved For Empty (LC0045)
   0.001   <1      Lookup Page Id And Drill Down Page Id (LC0004)
   0.001   <1      Accessibility Enum Value With Caption (LC0056, LC0057)
   0.001   <1      Permission Set Coverage (LC0015)
  <0.001   <1      Give Field More Descriptive Name (LC0063)
  <0.001   <1      Check For Not Blank On Single Field Primary Keys (LC0013, LC0067)
  <0.001   <1      App Manifest Runtime Behind (LC0033)
  <0.001   <1      Property Application Area On Api Page (LC0060)
  <0.001   <1      Set OData Key Fields With System Id Field (LC0061)
  <0.001   <1      Empty Statements (LC0069)
  <0.001   <1      Mandatory Field Missing On Api Page (LC0062)
  <0.001   <1      Access Internal For Install And Upgrade Codeunits (LC0030)
  <0.001   <1      Internal Procedures Not Referenced Analyzer (LC0052, LC0053)
  <0.001   <1      Data Per Company Should Always Be Set (LC0007)
  <0.001   <1      Cognitive Complexity (LC0089, LC0090)
  <0.001   <1      Permission Set Caption Length (LC0014)
  <0.001   <1      Built In Date Time Method (LC0083)
  <0.001   <1      Page Style Data Type (LC0086)
  <0.001   <1      Explicitly Set Run Trigger (LC0040)
  <0.001   <1      Error With Text Constant (LC0048)
  <0.001   <1      Use Return Value For Error Handling (LC0084)
  <0.001   <1      Follow Interface Object Name Guide (LC0054)
  <0.001   <1      Check Object Permission (LC0068)

  11.806   19   CodeCop
   1.882    3      Do Not Declare Variables That Are Unused (AA0137)
   1.845    2      Variable Initialization Usage Analyzer (AA0205, AA0206, AA0214)
   1.646    2      Rec Db Invocation Analyzer (AA0181, AA0233)
   1.344    2      Email And Phone No Must Not Be Present In The Source (AA0240)
   0.901    1      Use Lowercase For Language Keywords (AA0241)
   0.755    1      Do Not Declare Unused Local Methods (AA0228)
   0.372   <1      Calc Fields Only On Flow Fields (AA0211)
   0.351   <1      Global Local Variables Should Not Have Same Name (AA0198, AA0202, AA0203, AA0204, AA0244, AA0245)
   0.271   <1      Variables Names Analyzer (AA0073, AA0237, AA0072)
   0.257   <1      Application Area Has Invalid Value (AA0189, AA0199, AA0200, AA0201)
   0.256   <1      Obsolete Justification (AA0213)
   0.205   <1      Binary Operator Spacing (AA0001)
   0.198   <1      Do Not Have Identifiers With Quotes In The Name (AA0100)
   0.186   <1      Do Not Find Record If You Do Not Use Values (AA0175)
   0.184   <1      Variable Declarations Should Be Ordered By Type (AA0021)
   0.161   <1      Tooltip Must Be Filled On Page For Fields And Actions (AA0218, AA0219, AA0220, AA0221, AA0223, AA0224, AA0225, AA0226, AA0234)
   0.117   <1      Suboptimal Index (AA0210)
   0.112   <1      Pass User Message And Error By Text Constant (AA0216)
   0.106   <1      Do Not Use StrSubstNo In Error Message (AA0231)
   0.101   <1      StrSubstNo Format String Should Be Text Constant Or Label (AA0217)
   0.097   <1      Do Not Suppress All Diagnostics (AA0246)
   0.077   <1      Do Not Declare Parameters By Reference If Never Changed (AA0150)
   0.060   <1      Do Not Assign To String With Smaller Capacity (AA0139)
   0.058   <1      Keyword Should Be First On Line (AA0018)
   0.050   <1      Follow File Name Guide (AA0215)
   0.045   <1      Use Parenthesis For Function Call (AA0008)
   0.026   <1      Partial Records Detect Jit Loads (AA0242)
   0.025   <1      Placeholders Should Have Explaining Comment (AA0470)
   0.022   <1      TextConst Label Variable Names Should Have Approved Suffix (AA0074)
   0.017   <1      String Params Must Match Placeholders (AA0131)
   0.016   <1      Use Field Table Caption For User Messages (AA0448)
   0.013   <1      Do Not Run Upgrade Codeunits (AA0243)
   0.010   <1      Event Subscriber Functions Must Be Local (AA0207)
   0.009   <1      Do Only Lower Permissions Inside Test Procedures (AA0087)
   0.009   <1      Do Not Write Code That Will Never Be Hit (AA0136)
   0.007   <1      Trailing Begin Should Be On The Same Line (AA0013)
   0.006   <1      CalcDate Only With Date Formula Usage (AA0462)
   0.003   <1      Unary Operator Spacing (AA0002, AA0003)
   0.003   <1      Table Fields Analyzer (AA0232)
   0.001   <1      Do Not Write Actions With No Effect (AA0194)
  <0.001   <1      SIFT Index Should Not Be Used For Primary And Unique Key (AA0222)
  <0.001   <1      Substitute If Else With Case Statement If More Than Two Alternatives (AA0022)
  <0.001   <1      On Install Per Company On Company Initialize Subscription Analyzer (AA0235)
  <0.001   <1      Use Camel Case Property Values For Api Pages (AA0101, AA0102)
  <0.001   <1      Page Part Must Not Refer To Parent Page (AA0105)
  <0.001   <1      Always Guard Methods With Unhandled Errors In Upgrade Codeunits (AA0227)
  <0.001   <1      Api Page Can Only Refer To The Same Subpage Once (AA0106)
  <0.001   <1      Use Camel Case Property Values For Api Queries (AA0103, AA0104)
  <0.001   <1      No Version Number On BCAssemblies Dot Net Vars (AA0230)
  <0.001   <1      Add This (AA0248)
  <0.001   <1      Permission Set Extensions Should Not Include Permissions For Objects From Different Application (AA0050, AA0051, AA0052, AA0053)
  <0.001   <1      Do Not Nest Withs (AA0040)
  <0.001   <1      Only Use Assert Error In Test Codeunits (AA0161)
  <0.001   <1      Use Namespaces (AA0247)
  <0.001   <1      Only Use Begin End For Compound Statements (AA0005)

  10.974   17   AppSourceCop
   2.130    3      Invalid Obsolete Tags Not Allowed (AS0072, AS0073, AS0074, AS0075, AS0076)
   1.422    2      Destructive Table Field Property Changes Not Allowed (AS0002, AS0004, AS0005, AS0036, AS0041, AS0044, AS0125, AS0115, AS0080, AS0086, AS0118, AS0069, AS0070, AS0071)
   1.399    2      Destructive Page Changes Not Allowed (AS0029, AS0030, AS0031, AS0032, AS0033, AS0125)
   1.295    2      Destructive Table Key Property Changes Not Allowed (AS0009, AS0010, AS0038, AS0042, AS0043, AS0115, AS0123)
   1.000    1      Destructive Page Property Changes Not Allowed (AS0035, AS0040)
   0.890    1      Destructive Enum Changes Not Allowed (AS0082, AS0083, AS0125)
   0.487   <1      Translations Must Be Provided (AS0055, AS0056, AS0057, AS0087)
   0.475   <1      Destructive Table Property Changes Not Allowed (AS0001, AS0006, AS0034, AS0039, AS0068, AS0109, AS0115, AS0125)
   0.415   <1      Destructive Root Object Changes Not Allowed (AS0088, AS0089, AS0090, AS0124, AS0125)
   0.361   <1      Public API Breaking Changes Not Allowed (AS0018, AS0019, AS0020, AS0021, AS0022, AS0023, AS0024, AS0025, AS0026, AS0027, AS0028, AS0049, AS0063, AS0077, AS0078, AS0101, AS0102, AS0106, AS0107, AS0108, AS0114, AS0125)
   0.290   <1      Table Field Destructive Access Changes Not Allowed (AS0095)
   0.283   <1      Destructive Interface Implementation Changes Not Allowed (AS0064, AS0065, AS0066, AS0067, AS0128, AS0129)
   0.218   <1      Application Object Extensibility Change Not Allowed (AS0050)
   0.093   <1      Enum Value Warning Error Validation (AS0011, AS0098, AS0099)
   0.065   <1      Identifiers Must Have Valid Affixes (AS0011, AS0054, AS0079, AS0098)
   0.033   <1      Use Application Area Property (AS0062)
   0.028   <1      Permission Sets Should Not Be In XML (AS0094)
   0.023   <1      Do Not Subscribe To Company Open Events (AS0061)
   0.020   <1      Data Classification Property Must Be Specified (AS0016)
   0.018   <1      Namespace Change Not Allowed (AS0007)
   0.014   <1      Database Tables Are Read Only (AS0059)
   0.008   <1      Unsafe Method Invocation Not Allowed (AS0060)
   0.001   <1      Defining Reserved Namespaces Not Allowed (AS0008)
   0.001   <1      Id Range Must Be Respected (AS0013, AS0099)
  <0.001   <1      App Manifest Configuration Must Be Provided (AS0014, AS0015, AS0047, AS0048, AS0051, AS0052, AS0053, AS0081, AS0084, AS0085, AS0092, AS0100, AS0104, AS0126)
  <0.001   <1      Obsolete Object Reference Not Allowed (AS0105)
  <0.001   <1      Tables Must Have Permission Set Defined (AS0103)
  <0.001   <1      Public API Breaking Changes Not Allowed (AS0018, AS0019, AS0020, AS0021, AS0022, AS0023, AS0024, AS0025, AS0026, AS0027, AS0028, AS0049, AS0063, AS0077, AS0078, AS0101, AS0102, AS0106, AS0107, AS0108, AS0114, AS0125)
  <0.001   <1      Destructive Taking Ownership Of Moved Objects (AS0116, AS0117, AS0119, AS0120, AS0121, AS0122)
  <0.001   <1      Table Field Destructive Access Changes Not Allowed On Moving Objects (AS0095)
  <0.001   <1      Previous Version Not Found (AS0003, AS0091)
  <0.001   <1      Destructive Table Property Changes Not Allowed On Moving Objects (AS0001, AS0006, AS0034, AS0039, AS0068, AS0109, AS0115, AS0125)
  <0.001   <1      Previous Version Rename Not Allowed (AS0096, AS0097)
  <0.001   <1      Destructive Table Field Property Changes Not Allowed On Moving Objects (AS0002, AS0004, AS0005, AS0036, AS0041, AS0044, AS0125, AS0115, AS0080, AS0086, AS0118, AS0069, AS0070, AS0071)
  <0.001   <1      Destructive Table Key Property Changes Not Allowed On Moving Objects (AS0009, AS0010, AS0038, AS0042, AS0043, AS0115, AS0123)
  <0.001   <1      Application Object Extensibility Change Not Allowed On Moving Objects (AS0050)
  <0.001   <1      Permission Set Extensions Should Not Include Permissions For Objects From Different Application (AS0110, AS0111, AS0112, AS0113)
  <0.001   <1      Only Use Assert Error In Test Codeunit (AS0058)

   0.031   <1   UICop
   0.020   <1      Rich Text Editor Must Be Alone In Fast Tab Group (AW0016)
   0.002   <1      About Property Not Supported (AW0012)
   0.001   <1      Repeater With Flow Filter Cannot Be Displayed (AW0007)
   0.001   <1      Use Usage Category Property (AW0006)
   0.001   <1      Cue Groups Cannot Contain Both Actions And Fields (AW0002)
  <0.001   <1      Add Promoted Only If All Actions Marked Promoted (AW0011)
  <0.001   <1      Use Image Property (AW0005)
  <0.001   <1      Blob Cannot Be Used On Page Field (AW0004)
  <0.001   <1      Repeater With Parts Cannot Be Displayed (AW0003)
  <0.001   <1      Repeaters Is Not Supported In Card Pages (AW0008)
  <0.001   <1      Blob Bitmap Usage On Page Field Deprecated (AW0009)
  <0.001   <1      Hidden Group With Action Ref Targets (AW0014)
  <0.001   <1      Hidden Group With Promoted Actions (AW0013)
  <0.001   <1      Request Page Of Xml Ports Cannot Be Displayed (AW0001)
  <0.001   <1      Scope Repeater Actions Should Be Promoted (AW0015)
  <0.001   <1      Repeaters In Groups Not Supported In List Pages (AW0010)

Btw, I'm really glad that the new rules LC0089 and LC0090 are so fast! 👍

jwikman avatar Feb 10 '25 22:02 jwikman