Hello everyone,
We are pleased to announce that the new version of Acuminator 4.0.0 has been released.
This is a major update that introduces a new command-line tool, a large number of new diagnostics, significant enhancements to the Code Map, and important performance improvements. You can find the detailed summary of all changes in the release notes:
https://github.com/Acumatica/Acuminator/releases/tag/v4.0.0
You can download the new version of Acuminator from Visual Studio Marketplace:
https://marketplace.visualstudio.com/items?itemName=Acumatica.Acuminator
Alternatively, you can install Acuminator from binaries attached to the GitHub release as assets:
https://github.com/Acumatica/Acuminator/releases/tag/v4.0.0
Note that if you have previously installed a beta version of Acuminator or a custom feature build, then you may need to uninstall it from Visual Studio first before installing the new Acuminator version.
Key Changes
- New Acuminator Console Runner: A new standalone command-line tool for running Acuminator analysis outside of the IDE, perfect for CI/CD pipelines.
- New PX1099 Diagnostic: A flexible new diagnostic to flag calls to APIs that are incompatible with the Acumatica Framework. The new diagnostic can be configured by users with custom lists of forbidden and allowed APIs. Effectively, it can ban calls to any API specified by the user.
-
Significant Improvements in Code Analysis: Acuminator now includes 24 new diagnostics for identifying and preventing issues in DAC fields, graph and DAC declarations,
PXOverridemethods, and asynchronous code. Many existing diagnostics were also enhanced to support new scenarios and changes in Acumatica Framework. - Major Code Map Enhancements: The Code Map has been greatly improved with a new filter box, display of base types for DACs and graphs, and navigation to base graph and DAC sources declared in external DLLs.
- Numerous bug fixes and performance optimizations.
Acuminator Console Runner
- Takes .sln and .csproj files as an input allowing you to analyze the entire solution or project.
- Exposes all Acuminator code analysis options among its command-line arguments.
-
Allows you to group results by file and diagnostic ID.
- Supports JSON output format.
https://github.com/Acumatica/Acuminator/blob/dev/docs/AcuminatorCLI.md
Code Map Enhancements
- New Filter Box: Quickly find nodes in complex DACs and graphs.

- Display of Base Types: The Code Map now shows base types and base graphs and DACs for graph and DAC extensions.

-
Advanced Navigation: Code Map now uses the navigation capabilities of Visual Studio to support navigation to base graphs and DACs declared in external DLLs. Depending on VS settings you will get navigate either to generated metadata or the decompiled source code.
- New Information Displayed:
-
The Code Map for DACs has been completely changed from DAC field properties to a more complete DAC fields view, showing both the BQL field and the C# property.
- New grouping nodes for audit DAC fields, non-audit system fields, and C# properties without a corresponding BQL field have been added to Code Map for DACs.
-
Attributes are now shown for DACs and graphs.
-
Initialize,Configure, andIsActiveFor<TGraph>methods are now displayed in Code Map. - New icons and indicators for projection DACs,
PXAccumulatorattributes, and more.
-
- New Settings Page: Code Map received a new settings page in the Acuminator section of Visual Studio settings. The new page allows you to specify how Code Map tree nodes are expanded.
Changes in Code Analysis
The new Acuminator release introduces 24 new diagnostics to detect issues and improve code quality and enforce best practices. Many of them come with accompanying automatic code fixes which can be applied to fix the problem in the entire document, project, or the entire solution.
New PX1099 Diagnostic For Banned API Detection
You can find more details on the diagnostic page: https://github.com/Acumatica/Acuminator/blob/dev/docs/diagnostics/PX1099.md.
New Diagnostics For DACs and DAC Extensions
- PX1065: Reports DAC field properties missing their BQL field declarations. An accompanying code fix automatically generates the required BQL field.
- PX1066: Detects typos in BQL field names. An accompanying code fix renames the BQL field so that it matches the name of the DAC field property.
- PX1067: Reports BQL fields from derived DACs that are not redeclared. The code fix for this diagnostic adds redeclarations of all BQL fields declared in base DACs to the derived DAC.
- PX1068: Checks for type mismatches between a DAC field property and its BQL field. The diagnostic comes with two available code fixes that allow to fix either the property type or the type of the BQL field.
- PX1069: Checks for missing required fields like audit fields and timestamp. The code fix automatically adds all the missing mandatory fields to the DAC.
- PX1078: Checks for incompatible types and sizes between a local DAC field and a foreign DAC field referenced by the
PXSelectorattribute to prevent runtime truncation or type mismatches. The diagnostic has been implemented by the member of the Acumatica Commerce team Andrei Saiapin. His contribution is much appreciated. - PX1110: Enforces that DACs with
PXDBLocalizableStringalso have aNoteIDfield. An accompanying code fix adds the missingNoteIDfield to the DAC. - PX1117: Detects forbidden complex non-linear type hierarchies in DAC extensions.
New Diagnostics For Graphs and Graph Extensions
- PX1077: Forbids private graph event handlers. The code fix for the diagnostic will attempt to change a private event handler into a protected virtual method. The diagnostic has been implemented by the external contributor Kemal Taskin. His contribution is much appreciated.
- PX1111: Detects processing views with main DACs that lack a
NoteIDfield. - PX1112: Requires generic graphs and extensions to be abstract. The code fix adds the abstract modifier to the graph or graph extension.
- PX1113: Forbids sealed graphs and extensions. An accompanying code fix removes the sealed modifier from graphs and graph extensions.
- PX1114: Reports graph extensions that inherit from terminal graph extensions.
New Diagnostics For PXOverride Methods
PXOverride methods:- PX1079: Prohibits
PXOverridemethods without an additional delegate parameter. An accompanying code fix generates an additional delegate parameter for thePXOverridemethod. - PX1097: Forbids non-public or virtual
PXOverridemethods. The code fix changes the accessibility of the method to public and removes virtual modifier. - PX1098: Requires the
PXOverridemethod to have an XML documentation comment with a reference to its base method. The code fix generates the correct XML documentation comment. - PX1100: Reports
PXOverridemethods that override obsolete base methods marked withSystem.ObsoleteAttribute. - PX1101: Checks that the delegate parameter of the PXOverride method has the same signature as the base method. The code fix corrects the signature.
- PX1102: Checks that the additional delegate parameter of the PXOverride method has a name conforming to Acumatica naming conventions. The code fix corrects the name.
Changes in Diagnostics For Asynchronous Code
- New PX1038 diagnostic: Forbids async void methods, lambdas, and anonymous methods.
- New PX1120 diagnostic: Reports incorrect usage of .NET Task types like System.Threading.Tasks.Task and System.Threading.Tasks.Task<T>.
Other New Diagnostics
- PX1115: Checks that higher-level DAC and graph extensions have only **terminal** extensions as their *base* extensions.
-
PX1116: Checks for circular references in the type hierarchy of graph and DAC extensions.
Other Notable Changes
- Improvements in Existing Diagnostics: Many key analysis algorithms have been reworked, optimized, enhanced, or reworked for better accuracy and performance. Thanks to these changes, most Acuminator diagnostics were significantly improved. Some of the existing diagnostics now support new scenarios or received an accompanying code fix. Please check the release notes for details.
- Bug Fixes: A large number of bugs have been fixed, addressing issues like Visual Studio crashes from stack overflows, and false alerts in various diagnostics. The support for many modern C# syntax expression was added to Acuminator.
- Support for Visual Studio 2017 Dropped: Acuminator 4.0.0 no longer supports Visual Studio 2017. The last version with support is 3.1.3.
- ARM Platform Support: The Acuminator extension can now be used on machines with ARM64 processors.
- For a complete list of all changes, new features, and bug fixes, please refer to the full release notes:
https://github.com/Acumatica/Acuminator/releases/tag/v4.0.0
Acknowledgements
Finally, I would like to give my thanks to the people who greatly helped me with this release and made it possible:
- Kemal Taskin for the contribution of PX1077 diagnostic.
- Andrei Saiapin from the Acumatica Commerce Team for the contribution of PX1078 diagnostic.
- Ekaterina Androsova from the Acumatica Doc Team for the great help with all Acuminator documentation and release notes.
- Acumatica UI designers Valery Vydrin and Vitalii Skoryk for the design of Acuminator Code Map icons.
- Members of Acumatica Platform and Build teams Vladimir Panchenko, Andrey Budaev, and Kirill Suntsov for the help with the Acuminator release process.
- Members of Acumatica ISV Support and Application teams Dmitrii Naumov, Evgeny Afanasiev, Dmitry Kasatsky, and Stanislav Lesin for useful information about the current Acumatica Framework rules and best practices.
- Everyone else who helped and may not have been mentioned above.
