Open rvanbekkum opened 7 months ago
Hi @anzwdev,
I noticed you made a commit that made it into the new release. Thanks for looking into it! I tried the new release, but unfortunately I still do not get the rules of my custom code analyzer.
In the extensions folder I have the following:
But I do not have an option to select the custom code analyzer in the viewer: :(
Do you have any idea? Did you get it to work with a custom code analyzer?
Hi @rvanbekkum
There was a bug in analyzers detection, it was ignoring custom analyzers if they were added to the "al.codeAnalyzers" setting as "${analyzerfolder}
If it is not working for you, then you must have different setting than my test environment. Maybe my extension reads wrong settings? Are you using multi-folder workspace?
Yes, I am using a multi-root workspace. The al.codeAnalyzers
setting is defined per project in the workspace in its settings.json
file.
I haven't checked yet if it does work by opening the project specifically instead of the .code-workspace file which opens the multi-root workspace.
I could check that as well tomorrow when I'm working/at my desk again 😉
Any more info I could provide that would help?
It looks like a problem with multi-root workspace projects. I've modified the code, it works for me now. Fix will be available in the next release.
I tried opening a specific folder/project instead of a multi-root workspace (.code-workspace file).
Then, the Show Code Analyzer Rules window does give the options to select custom code analyzers 😊,
BUT:
It does not show the rules of the custom code analyzers :(
There is a duplicate entry for "BusinessCentral.LinterCop" and "${analyzerFolder}BusinessCentral.LinterCop.dll"
The "BusinessCentral.LinterCop" entry does work, the "${analyzerFolder}BusinessCentral.LinterCop.dll" entry does not.
I tried opening a specific folder/project instead of a multi-root workspace (.code-workspace file).
Then, the Show Code Analyzer Rules window does give the options to select custom code analyzers 😊,
BUT:
- It does not show the rules of the custom code analyzers :(
- There is a duplicate entry for "BusinessCentral.LinterCop" and "${analyzerFolder}BusinessCentral.LinterCop.dll" The "BusinessCentral.LinterCop" entry does work, the "${analyzerFolder}BusinessCentral.LinterCop.dll" entry does not.
This same issues persist with the latest update (v13.64.0) 😉
I think that I know where the problem is. The check that I've implemented in the extension code is case sensitive and it is looking for "${analyzerFolder}" while your screenshot shows "${analyzerfolder}". I will change it, but could you check if it works if you use "${analyzerFolder}" in the code analyzer name?
Good find! I actually took that casing from the instructions/examples in the LinterCop repository, e.g., https://github.com/StefanMaron/BusinessCentral.LinterCop/blob/master/.assets/VSCode.md
I've modified the logic, it should not be case sensitive anymore.
I did some tests the past few days, but unfortunately it doesn't work at all anymore :(
It also does not work for my colleagues.
My configuration:
AL Language extension for Microsoft Dynamics 365 Business Central Version: 13.1.1065068
(I have also tried switching back to version 13.0.1027618 but without any luck either)
AZ AL Dev Tools/AL Code Outline Version: 13.67.0
Visual Studio Code Version: 1.90.2 (system setup) Commit: 5437499feb04f7a586f677b155b039bc2b3669eb Date: 2024-06-18T22:34:26.404Z Electron: 29.4.0 ElectronBuildId: 9728852 Chromium: 122.0.6261.156 Node.js: 20.9.0 V8: 12.2.281.27-electron.0 OS: Windows_NT x64 10.0.22631
settings.json
{
"al.codeAnalyzers": [
"${AppSourceCop}",
"${CodeCop}",
"${PerTenantExtensionCop}",
"${UICop}",
"${analyzerFolder}BusinessCentral.LinterCop.dll",
"${analyzerFolder}BusinessCentral.WSBCop.dll"
],
"al.enableCodeAnalysis": true
}
Was it working earlier? Are these custom analyzers reporting any warnings? Can you see any errors when you run "Open AZ AL Dev Tools log file" command?
I've tried the command with a custom analyzer with a single AL project folder and with multi-root workspace and it works for me in all these cases. Does it work if you specify full path to your code analyzer instead of using "${analyzerFolder}" prefix?
Was it working earlier?
Yes, I remember seeing it work earlier, but now for me and my colleagues it does not work.
Are these custom analyzers reporting any warnings?
Yes, diagnostics are raised from the code analyzer rules of this code analyzer, e.g.,
Can you see any errors when you run "Open AZ AL Dev Tools log file" command?
No, there are no recent errors.
I've tried the command with a custom analyzer with a single AL project folder and with multi-root workspace and it works for me in all these cases. Does it work if you specify full path to your code analyzer instead of using "${analyzerFolder}" prefix?
I have tried with a multi-root workspace, single projectfolder, using "${analyzerfolder}BusinessCentral.WSBCop.dll"
vs. "${analyzerFolder}BusinessCentral.WSBCop.dll"
, and now also with "C:/Users/r.vanbekkum/.vscode/extensions/ms-dynamics-smb.al-13.1.1065068/bin/Analyzers/BusinessCentral.WSBCop.dll"
.
Unfortunately I cannot get it to work with any combination :(
It does show the code analyzer as a selectable option:
But once you change the filters, no rules are displayed:
I am not sure what the problem should be. I remember seeing the rules in the rules viewer for this code analyzer/cop. And I have tried all sorts of things. The code analyzer itself works perfectly fine as it raises diagnostics where we would expect them and no exceptions. It is compiled against the latest AL marketplace version which I am also using in my VS Code installation.
It looks like it is detected correctly, but then something is wrong when it is loaded into memory. I will modify this proces and write more information to the log.
I've released a new version of the extenson, it should save more information in the log if there are any problem with loading analyzers dlls. Could you test "Show Code Analyzer Rules" in the new version and check if there is anything in the log?
Hi @anzwdev,
I have checked, and these are the logs that arise when running command "Open AZ AL Dev Tools log file":
2024-07-17 16:12:09.577 [ERROR] Error loading code analyzers library 'c:\Users\r.vanbekkum\.vscode\extensions\ms-dynamics-smb.al-13.1.1065068\bin\Analyzers\BusinessCentral.WSBCop.dll': : Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified.
at AnZwDev.ALTools.CodeAnalysis.DllCodeAnalyzersLibrary.Load() in D:\a\al-code-outline\al-code-outline\language-server\Shared.AnZwDev.ALTools\CodeAnalysis\DllCodeAnalyzersLibrary.cs:line 80
at AnZwDev.ALTools.CodeAnalysis.CodeAnalyzersLibrariesCollection.GetCodeAnalyzersLibrary(String name) in D:\a\al-code-outline\al-code-outline\language-server\Shared.AnZwDev.ALTools\CodeAnalysis\CodeAnalyzersLibrariesCollection.cs:line 37
2024-07-17 16:15:09.645 [ERROR] Error loading code analyzers library 'c:\Users\r.vanbekkum\.vscode\extensions\ms-dynamics-smb.al-13.1.1065068\bin\Analyzers\BusinessCentral.WSBCop.dll': : Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified.
at AnZwDev.ALTools.CodeAnalysis.DllCodeAnalyzersLibrary.Load() in D:\a\al-code-outline\al-code-outline\language-server\Shared.AnZwDev.ALTools\CodeAnalysis\DllCodeAnalyzersLibrary.cs:line 80
at AnZwDev.ALTools.CodeAnalysis.CodeAnalyzersLibrariesCollection.GetCodeAnalyzersLibrary(String name) in D:\a\al-code-outline\al-code-outline\language-server\Shared.AnZwDev.ALTools\CodeAnalysis\CodeAnalyzersLibrariesCollection.cs:line 37
2024-07-17 16:18:09.754 [ERROR] Error loading code analyzers library 'c:\Users\r.vanbekkum\.vscode\extensions\ms-dynamics-smb.al-13.1.1065068\bin\Analyzers\BusinessCentral.WSBCop.dll': : Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified.
at AnZwDev.ALTools.CodeAnalysis.DllCodeAnalyzersLibrary.Load() in D:\a\al-code-outline\al-code-outline\language-server\Shared.AnZwDev.ALTools\CodeAnalysis\DllCodeAnalyzersLibrary.cs:line 80
at AnZwDev.ALTools.CodeAnalysis.CodeAnalyzersLibrariesCollection.GetCodeAnalyzersLibrary(String name) in D:\a\al-code-outline\al-code-outline\language-server\Shared.AnZwDev.ALTools\CodeAnalysis\CodeAnalyzersLibrariesCollection.cs:line 37
2024-07-17 16:21:09.794 [ERROR] Error loading code analyzers library 'c:\Users\r.vanbekkum\.vscode\extensions\ms-dynamics-smb.al-13.1.1065068\bin\Analyzers\BusinessCentral.WSBCop.dll': : Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified.
at AnZwDev.ALTools.CodeAnalysis.DllCodeAnalyzersLibrary.Load() in D:\a\al-code-outline\al-code-outline\language-server\Shared.AnZwDev.ALTools\CodeAnalysis\DllCodeAnalyzersLibrary.cs:line 80
at AnZwDev.ALTools.CodeAnalysis.CodeAnalyzersLibrariesCollection.GetCodeAnalyzersLibrary(String name) in D:\a\al-code-outline\al-code-outline\language-server\Shared.AnZwDev.ALTools\CodeAnalysis\CodeAnalyzersLibrariesCollection.cs:line 37
2024-07-17 16:24:09.885 [ERROR] Error loading code analyzers library 'c:\Users\r.vanbekkum\.vscode\extensions\ms-dynamics-smb.al-13.1.1065068\bin\Analyzers\BusinessCentral.WSBCop.dll': : Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified.
at AnZwDev.ALTools.CodeAnalysis.DllCodeAnalyzersLibrary.Load() in D:\a\al-code-outline\al-code-outline\language-server\Shared.AnZwDev.ALTools\CodeAnalysis\DllCodeAnalyzersLibrary.cs:line 80
at AnZwDev.ALTools.CodeAnalysis.CodeAnalyzersLibrariesCollection.GetCodeAnalyzersLibrary(String name) in D:\a\al-code-outline\al-code-outline\language-server\Shared.AnZwDev.ALTools\CodeAnalysis\CodeAnalyzersLibrariesCollection.cs:line 37
2024-07-17 16:24:13.333 [ERROR] Error: Attempted to read past the end of the stream.
at StreamJsonRpc.PipeMessageHandler.ReadAtLeastAsync(Int32 requiredBytes, Boolean allowEmpty, CancellationToken cancellationToken)
at StreamJsonRpc.PipeMessageHandler.DeserializeMessageAsync(Int32 contentLength, Encoding specificEncoding, Encoding defaultEncoding, CancellationToken cancellationToken)
at StreamJsonRpc.HeaderDelimitedMessageHandler.ReadCoreAsync(CancellationToken cancellationToken)
at StreamJsonRpc.MessageHandlerBase.ReadAsync(CancellationToken cancellationToken)
at StreamJsonRpc.JsonRpc.ReadAndHandleRequestsAsync()
at AnZwDev.ALTools.Server.LanguageServerHost.RunAsync() in D:\a\al-code-outline\al-code-outline\language-server\Shared.AnZwDev.ALTools.Server\LanguageServerHost.cs:line 142
I am not sure what System.Configuration.ConfigurationManager
is used for. It is not referenced in the BusinessCentral.WSBCop
analyzer. Maybe it's something needed by the 'AZ AL Dev Tools language server' to load the analyzer?
We are using multiple custom code analyzers, both the
BusinessCentral.LinterCop
and our ownBusinessCentral.MyCustomCop
. The Show Code Analyzer Rules command does pick up the LinterCop, but does not pick up the other custom code analyzer.The
BusinessCentral.MyCustomCop.dll
is in the same directory as theBusinessCentral.LinterCop.dll
, but the command does not include it in the overview. Would it be possible for it to pick up multiple custom code analyzers?By the way, the
settings.json
file of the AL projects look something like the following: