Custom language plugin + SonarLint + Connected Mode

Good morning,

I’ve read multiple times that SonarLint was not open to third-party plugins, but I wanted to confirm if that was still the case as of today, especially with SonarLint VSCode. As sonarlint-core seems to be running with a standalone backend (quite similar to sonar-scanner then), it would be nice to lift this restriction :slight_smile:

By the way, here is a stacktrace that I got in VSCode on a project bound to a SonarQube instance with my language plugin:

[Info  - 12:00:01.014] Analyzing file "file:///c:/Users/xxx/projets/pct/src/progress/pct/compile.p"...
[Error - 12:00:01.598] Analysis failed
java.lang.NullPointerException: Cannot invoke "org.sonarsource.sonarlint.core.commons.api.SonarLanguage.name()" because "language" is null
java.lang.NullPointerException: Cannot invoke "org.sonarsource.sonarlint.core.commons.api.SonarLanguage.name()" because "language" is null
	at org.sonarsource.sonarlint.ls.telemetry.SonarLintTelemetry.analysisDoneOnSingleLanguage(SonarLintTelemetry.java:76)
	at org.sonarsource.sonarlint.ls.AnalysisTaskExecutor.analyzeSingleModuleNonExcluded(AnalysisTaskExecutor.java:366)
	at org.sonarsource.sonarlint.ls.AnalysisTaskExecutor.analyzeSingleModule(AnalysisTaskExecutor.java:314)
	at org.sonarsource.sonarlint.ls.AnalysisTaskExecutor.analyze(AnalysisTaskExecutor.java:232)
	at org.sonarsource.sonarlint.ls.AnalysisTaskExecutor.analyze(AnalysisTaskExecutor.java:197)
	at org.sonarsource.sonarlint.ls.AnalysisTaskExecutor.lambda$analyze$2(AnalysisTaskExecutor.java:165)
	at java.base/java.util.HashMap.forEach(Unknown Source)
	at org.sonarsource.sonarlint.ls.AnalysisTaskExecutor.analyze(AnalysisTaskExecutor.java:165)
	at org.sonarsource.sonarlint.ls.AnalysisTaskExecutor.run(AnalysisTaskExecutor.java:137)
	at org.sonarsource.sonarlint.ls.AnalysisScheduler.lambda$analyzeAsync$1(AnalysisScheduler.java:261)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)

SonarQube 10.4.1 Dev Edition - VSCode plugin 4.4.1

Gilles

And thinking about it, there’s already an alert box when installing external plugin in SonarQube. Same could be done in SonarLint extension for VSCode, user would have to confirm if he wants to execute external plugins or not.

Hi Gilles,

There’s no technical reason for it. It’s because we try to be really protective of the developer experience, and nowhere moreso than in the IDE. That’s why we don’t download non-native analyzers in connected mode - because we can’t control (i.e. safeguard) the behavior/performance.

Well, that’s why we’re not supposed to be downloading 3rd-party plugins. By default every plug-in that is not for one of the supported languages by the IDE (this case VSCode) shouldn’t be downloaded, so I’m not sure why the presence of your plugin in your connected instance would cause this. Is your plugin an extension of one of the “native” languages, or an analyzer for a brand new language?

 
Ann

Ann,

My plugin is for a new language. I did the test again on a different machine, removed the .sonarlint directory, opened my project directory in VSCode, attached it to my private SQ instance. My plugins were downloaded in .sonarlint. Property SonarLint-Supported is set to true in this plugin, that might be enough for SonarLint to download it.

Gilles

1 Like

Hi Gilles,

I suppose it might. :joy:

To be explicit, did you get the same error on the second machine?

 
Thx,
Ann

I suppose it might. :joy:

If only there were a SonarLint-PleaseExecuteMyPluginInVSCode :slight_smile:

To be explicit, did you get the same error on the second machine?

Yes, exactly the same NullPointerException.

1 Like

Hi,

Thanks for confirming. This is flagged for the team.

 
Ann

Hi @gquerret ,

We have created a SLLS-230 ticket on our side to fix the NPE issue. You can track the progress directly in the ticket. A the moment, the fix is scheduled for the next release of SonarLint for VSCode :sonarlint_vscode: .

Property SonarLint-Supported is set to true in this plugin, that might be enough for SonarLint to download it.

That is true, setting SonarLint-Supported property is one of the conditions for downloading plugin. Note that during analysis SonarLint will only run rules from SonarSource analyzers including custom rules extending SonarSource analyzers.
We created SLCORE-756 ticket to improve and don’t download custom plugins.

Best,

Vojtech from :sonarlint:

1 Like