FP S2699: Tests should include assertions - NSubstitute

Make sure to read this post before raising a thread here:
How to Report a False-positive / False-negative :white_check_mark:

Then tell us:

  • What language is this for? C#

  • Which rule? csharpsquid:S2699 Tests should include assertions

  • Why do you believe it’s a false-positive/false-negative? I believe it’s a false-positive because the tests we have written do have assertions. Our assertions are more specific in that they are checking that methods receive the specific number of calls, whereas Sonar only respects the assertion if the expected number of calls parameter is removed. This seems to have only become an issue recently, with tests written 3+ years ago now being flagged for having missing assertions.

  • Are you using

    • SonarCloud? :white_check_mark:
    • SonarQube - which version?
    • SonarLint - which IDE/version?
      • in connected mode with SonarQube or SonarCloud? Yes, SonarLint (v. 10.12.0.79769) for JetBrains Rider (v.2024.1.4) in connected mode with SonarCloud
  • How can we reproduce the problem? Give us a self-contained snippet of code (formatted text, no screenshots)

Using a .NET 6.0 Console application, running C# 10.0 with NUnit and NSubstitute NuGet packages installed.

The following example has Sonar determining that the test contains no assertions. If you remove the requiredNumberOfCalls parameter so the code becomes _theThingIWantToCall.Received().Execute() then Sonar respects the assertion. I have also noticed this doesn’t apply to assertions that live within an AssertionScope.

public interface ITheThingIWantToCall
{
    string Execute();
}

public class TheThingIWantToCall : ITheThingIWantToCall
{
    public string Execute()
    {
        return "Hello, world!";
    }
}

public class TheThingIAmTesting
{
    private readonly ITheThingIWantToCall _theThingIWantToCall;

    public TheThingIAmTesting(ITheThingIWantToCall theThingIWantToCall)
    {
        _theThingIWantToCall = theThingIWantToCall;
    }

    public string DoTheMagic()
    {
        return _theThingIWantToCall.Execute();
    }
}
    
[TestFixture]
public class MyExampleTest
{
    private ITheThingIWantToCall _theThingIWantToCall;

    private TheThingIAmTesting _theThingIAmTesting;

    [SetUp]
    public void SetUp()
    {
        _theThingIWantToCall = Substitute.For<ITheThingIWantToCall>();

        _theThingIAmTesting = new TheThingIAmTesting(_theThingIWantToCall);
    }

    [Test]
    public void DoTheMagicCallsTheThingIWantToCallExecute()
    {
        _theThingIAmTesting.DoTheMagic();
            
        _theThingIWantToCall.Received(1).Execute();
    }
}

Hello @matthewhill-fgf,

Welcome to the community!

Does the issue show up in SonarCloud?

I see the issue only in Rider with SonarLint but not when doing an analysis using SonarScanner for .NET.

Thank you,

Hi Sebastien,

You’re right! The issue only shows up in SonarLint and not in SonarCloud.

Would this still be the correct place to raise the false positive?

Hey @matthewhill-fgf, sorry for the relatively late reply.

Could you please provide us with the SonarLint logs when you analyze this file? In the meantime, I’m investigating the issue, thanks!

Hey Nicolas, that’s all good.

Here’s the log:

Analysing 'SonarLintTest.cs' (ID 5c96db89-f9db-4176-92c2-250551fb3b88)...
 [2024-12-03T10:01:15.024] [SonarLint Server RPC request executor] INFO sonarlint - Triggering analysis with configuration: [
  baseDir: /Users/matthewhill/Dev
  extraProperties: {sonar.project.monorepo.enabled=false, sonaranalyzer-cs.nuget.packageVersion=10.3.0.106239, sonaranalyzer.security.cs.pluginVersion=10.9.0.33961, sonar.cs.ignoreHeaderComments=true, sonar.c.file.suffixes=.c,.h, sonar.typescript.file.suffixes=.ts,.tsx,.cts,.mts, sonar.python.coverage.reportPaths=coverage-reports/*coverage-*.xml, sonar.sensor.cache.enable=true, sonaranalyzer-vbnet.nuget.packageVersion=10.3.0.106239, sonar.text.activate=true, sonar.cobol.dialect=ibm-enterprise-cobol, sonar.go.file.suffixes=.go, sonar.cpd.cobol.minimumLines=30, sonar.cobol.exec.recoveryMode=true, block_report_submission_subscription_type=DISABLED, sonar.cs.analyzeRazorCode=true, sonar.locationChecksums=true, sonar.cs.internal.solutionPath=/Users/matthewhill/Dev/Test.sln, email.fromName=SonarCloud, block_project_provisioning_subscription_type=DISABLED, sonar.python.xunit.skipDetails=false, sonar.ipynb.file.suffixes=ipynb, sonar.dbcleaner.weeksBeforeKeepingOnlyAnalysesWithVersion=104, sonar.plsql.jdbc.driver.class=oracle.jdbc.OracleDriver, sonar.pullrequest.github.summary_comment=true, sonar.go.exclusions=**/vendor/**, sonar.php.exclusions=**/vendor/**, sonar.terraform.file.suffixes=.tf, sonar.forceAuthentication=false, sonar.plugins.loadAll=false, java_11_eos_date=2024-01-15, sonar.notifications.delay=60, sonar.cpp.file.suffixes=.cc,.cpp,.cxx,.c++,.hh,.hpp,.hxx,.h++,.ipp,.ixx,.mxx,.cppm,.ccm,.cxxm,.c++m, sonar.swift.file.suffixes=.swift, sonar.vbnet.roslyn.ignoreIssues=false, sonar.plsql.ignoreHeaderComments=false, sonar.flex.file.suffixes=as, sonar.jcl.file.suffixes=.jcl, sonaranalyzer.security.cs.nuget.packageVersion=10.9.0.33961, sonar.filesize.limit=20, sonar.ruby.file.suffixes=.rb, sonaranalyzer-cs.ruleNamespace=SonarAnalyzer.Enterprise.CSharp, sonar.pli.extralingualCharacters=#@$, sonar.cs.analyzeGeneratedCode=false, sonar.azureresourcemanager.file.identifier=https://schema.management.azure.com/schemas/,http://schema.management.azure.com/schemas/, sonar.python.xunit.reportPath=xunit-reports/xunit-result-*.xml, sonar.java.jvmframeworkconfig.file.patterns=**/src/main/resources/**/*app*.properties,**/src/main/resources/**/*app*.yaml,**/src/main/resources/**/*app*.yml, sonar.pli.marginLeft=2, qp.permission.delegate.entitlements.api.enabled=true, sonar.builtInQualityProfiles.disableNotificationOnUpdate=false, sonar.javascript.globals=angular,goog,google,OpenLayers,d3,dojo,dojox,dijit,Backbone,moment,casper,_,sap, sonar.dbcleaner.hoursBeforeKeepingOnlyOneSnapshotByDay=24, sonar.yaml.file.suffixes=.yaml,.yml, ai.code.assurance.entitlements.api.enabled=true, sonar.terraform.activate=true, sonar.pullrequest.provider=GitHub, sonar.css.file.suffixes=.css,.less,.scss,.sass, sonar.organizations.createPersonalOrg=true, sonar.cpd.abap.minimumTokens=100, sonar.docker.file.patterns=Dockerfile,*.dockerfile, delete_old_projects_excluded_project_kees=brave_brave-core,simgrid_simgrid,apache_struts,microsoft_vscode-python,mediawiki-core,jhipster-sample-application,JMeter,typo3,org.xwiki.platform:xwiki-platform,apache_ofbiz-framework,org.nuxeo:nuxeo-ecm,monica,sonarlint-visualstudio, sonar.html.file.suffixes=.html,.xhtml,.cshtml,.vbhtml,.aspx,.ascx,.rhtml,.erb,.shtm,.shtml,.cmp,.twig, sonaranalyzer-vbnet.nuget.packageId=SonarAnalyzer.Enterprise.VisualBasic, sonar.php.frameworkDetection=true, sonar.vb.file.suffixes=.bas,.frm,.ctl, email.from=noreply@sonarcloud.io, sonaranalyzer-vbnet.pluginVersion=10.3.0.106239, sonar.vbnet.ignoreHeaderComments=true, sonar.rpg.leftMarginWidth=12, sonaranalyzer.security.cs.analyzerId=SonarAnalyzer.Security, sonar.scanner.force-deprecated-java-version=false, sonaranalyzer.security.cs.nuget.packageId=SonarAnalyzer.Security, sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByWeek=1, sonaranalyzer-vbnet.analyzerId=SonarAnalyzer.Enterprise.VisualBasic, email.prefix=[SonarCloud], sonar.scala.file.suffixes=.scala, sonar.cs.roslyn.ignoreIssues=false, delete_old_projects_deployment_date=1671634414000, sonar.cobol.byteBasedColumnCount=false, sonar.cloudformation.activate=true, sonar.pli.marginRight=72, sonaranalyzer-cs.pluginKey=csharpenterprise, sonar.kubernetes.activate=true, sonar.cpd.cobol.minimumTokens=100, sonar.java.ignoreUnnamedModuleForSplitPackage=False, sonar.json.file.suffixes=.json, sonar.cs.internal.dotnetCliExeLocation=/usr/local/share/dotnet/dotnet, sonaranalyzer.security.cs.pluginKey=securitycsharpfrontend, sonar.auth.microsoft.enabled=true, sonar.vb.ignoreHeaderComments=true, sonar.apex.file.suffixes=.cls,.trigger, sonaranalyzer-vbnet.ruleNamespace=SonarAnalyzer.Enterprise.VisualBasic, suspend_analysis_of_projects=OXYGEN:*, sonar.cloudformation.file.identifier=AWSTemplateFormatVersion, sonar.lf.logoWidthPx=105, sonar.javascript.ignoreHeaderComments=true, sonar.dbcleaner.daysBeforeDeletingClosedIssues=30, sonar.java.enablePreview=False, sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByMonth=4, sonar.lf.gravatarServerUrl=https://secure.gravatar.com/avatar/{EMAIL_MD5}.jpg?s={SIZE}&d=identicon, sonar.core.serverBaseURL=https://sonarcloud.io, publish_data_events=true, sonar.branch.longLivedBranches.regex=(branch|release|develop).*, sonar.objc.file.suffixes=.m, sonar.autoscan.enabled=false, sonar.ruby.coverage.reportPaths=coverage/.resultset.json, sonar.text.inclusions=**/*.sh,**/*.bash,**/*.zsh,**/*.ksh,**/*.ps1,**/*.properties,**/*.conf,**/*.pem,**/*.config,.env,.aws/config, sonar.cobol.sourceFormat=fixed, rp.entitlements.api.enabled=true, sonar.sensor.cache.baseUrl=https://api.sonarcloud.io/analysis, sonar.qualityProfiles.allowDisableInheritedRules=true, sonaranalyzer-cs.staticResourceName=SonarAnalyzer-10.3.0.106239.zip, sonar.notifications.runningDelayBeforeReportingStatus=600, sonar.cpd.cobol.ignoreLiteral=true, sonar.jsp.file.suffixes=.jsp,.jspf,.jspx, sonar.pli.ignoreHeaderComments=true, sonar.javascript.maxFileSize=1000, sonaranalyzer-cs.nuget.packageId=SonarAnalyzer.Enterprise.CSharp, sonar.javascript.environments=amd,applescript,atomtest,browser,commonjs,embertest,greasemonkey,jasmine,jest,jquery,meteor,mocha,mongo,nashorn,node,phantomjs,prototypejs,protractor,qunit,serviceworker,shared-node-browser,shelljs,webextensions,worker, sonar.cs.internal.msBuildPath=/usr/local/share/dotnet/sdk/8.0.303, sonar.authenticator.downcase=false, sonar.scm.disabled=false, sonar.ruby.exclusions=**/vendor/**, sonar.dart.file.suffixes=.dart, sonar.ansible.activate=true, sonar.vbnet.file.suffixes=.vb, sonar.maintenance_mode.start_date=2023-09-28T09:10:00:00.000+01:00, sonaranalyzer-cs.analyzerId=SonarAnalyzer.Enterprise.CSharp, sonar.sensor.cache.project.enable=true, sonar.rpg.file.suffixes=.rpg,.rpgle,.sqlrpgle,.RPG,.RPGLE,.SQLRPGLE, sonar.core.id=1BD809FA-AWHW8ct9-T_TB3XqouNu, sonar.exclusions=**/*SwaggerSetup.cs, sonar.cobol.adaprep.activation=false, sonar.abap.file.suffixes=.abap,.ab4,.flow,.asprog, sonar.global.exclusions=**/build-wrapper-dump.json, sonar.organizations.anyoneCanCreate=true, sonar.cfamily.ignoreHeaderComments=true, sonar.technicalDebt.ratingGrid=0.05,0.1,0.2,0.5, sonar.technicalDebt.developmentCost=30, sonar.lf.enableGravatar=true, sonar.docker.activate=true, sonar.python.file.suffixes=py, sonaranalyzer-cs.pluginVersion=10.3.0.106239, sonaranalyzer.security.cs.staticResourceName=SonarAnalyzer.Security-10.9.0.33961.zip, sonar.cs.file.suffixes=.cs,.razor, sonar.plsql.file.suffixes=sql,tab,pkb, sonaranalyzer.security.cs.ruleNamespace=SonarAnalyzer.Security, sonar.azureresourcemanager.file.suffixes=.bicep, sonar.javascript.file.suffixes=.js,.jsx,.cjs,.mjs,.vue, sonar.cpd.abap.minimumLines=20, sonar.cobol.tab.width=8, sonar.maintenance_mode.message=SonarCloud will undergo maintenance on Thursday, September 28th.
Automatic Analysis will not be available between 07:00 CET and 09:00 CET, sonaranalyzer-vbnet.staticResourceName=SonarAnalyzer-10.3.0.106239.zip, sonar.text.inclusions.activate=true, sonar.vbnet.analyzeGeneratedCode=false, sonar.pli.file.suffixes=.pli, sonar.java.file.suffixes=.java,.jav, sonar.kotlin.file.suffixes=.kt,.kts, sonar.php.file.suffixes=php,php3,php4,php5,phtml,inc, sonar.scanner.skipNodeProvisioning=false, sonar.xml.file.suffixes=.xml,.xsd,.xsl,.config, sonar.dbcleaner.weeksBeforeDeletingAllSnapshots=260, sonaranalyzer-vbnet.pluginKey=vbnetenterprise, sonar.maintenance_mode.link=https://community.sonarsource.com/t/sonarcloud-autoscan-maintenance-september-28th-07-00-and-09-00-cet/101442, sonar.azureresourcemanager.activate=true, sonar.java.jvmframeworkconfig.activate=true, sonar.maxLinesOfCodePerFile=2000000, sonar.tsql.file.suffixes=.tsql, sonar.core.startTime=2024-12-02T15:38:25+0100}
  activeRules: [24 css, 48 Web, 333 csharpsquid, 309 typescript, 121 secrets, 310 javascript]
  inputFiles: [
    file:///Users/matthewhill/Dev/Test/SonarLintTest.cs (UTF-8)
  ]
]

 [2024-12-03T10:01:15.385] [sonarlint-analysis-engine] ERROR sonarlint - Error loading components for plugin 'text'
java.lang.IllegalStateException: Unable to register extension org.sonar.api.config.PropertyDefinition from plugin 'text'
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.addExtension(SpringComponentContainer.java:222)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.addExtension(SpringComponentContainer.java:37)
	at org.sonarsource.sonarlint.core.plugin.commons.ExtensionInstaller.loadExtensions(ExtensionInstaller.java:64)
	at org.sonarsource.sonarlint.core.plugin.commons.ExtensionInstaller.install(ExtensionInstaller.java:53)
	at org.sonarsource.sonarlint.core.analysis.container.global.AnalysisExtensionInstaller.install(AnalysisExtensionInstaller.java:44)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.AnalysisContainer.addPluginExtensions(AnalysisContainer.java:114)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.AnalysisContainer.doBeforeStart(AnalysisContainer.java:63)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.startComponents(SpringComponentContainer.java:180)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.execute(SpringComponentContainer.java:161)
	at org.sonarsource.sonarlint.core.analysis.container.module.ModuleContainer.analyze(ModuleContainer.java:71)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.doRunAnalysis(AnalyzeCommand.java:65)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.lambda$execute$0(AnalyzeCommand.java:54)
	at org.sonarsource.sonarlint.core.progress.RpcProgressMonitor.lambda$startTask$0(RpcProgressMonitor.java:44)
	at org.sonarsource.sonarlint.core.progress.TaskManager.startTask(TaskManager.java:61)
	at org.sonarsource.sonarlint.core.progress.RpcProgressMonitor.startTask(RpcProgressMonitor.java:44)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.execute(AnalyzeCommand.java:53)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.execute(AnalyzeCommand.java:34)
	at org.sonarsource.sonarlint.core.analysis.AnalysisEngine$AsyncCommand.execute(AnalysisEngine.java:153)
	at org.sonarsource.sonarlint.core.analysis.AnalysisEngine.executeQueuedCommands(AnalysisEngine.java:71)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'jdk.internal.loader.ClassLoaders$AppClassLoader@67424e82-org.sonar.api.config.PropertyDefinition-sonar.text.activate' defined in null: Cannot register bean definition [Generic bean: class [org.sonar.api.config.PropertyDefinition]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] for bean 'jdk.internal.loader.ClassLoaders$AppClassLoader@67424e82-org.sonar.api.config.PropertyDefinition-sonar.text.activate': There is already [Generic bean: class [org.sonar.api.config.PropertyDefinition]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] bound.
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(DefaultListableBeanFactory.java:1006)
	at org.springframework.context.support.GenericApplicationContext.registerBeanDefinition(GenericApplicationContext.java:342)
	at org.springframework.beans.factory.support.BeanDefinitionReaderUtils.registerBeanDefinition(BeanDefinitionReaderUtils.java:164)
	at org.springframework.context.annotation.AnnotatedBeanDefinitionReader.doRegisterBean(AnnotatedBeanDefinitionReader.java:285)
	at org.springframework.context.annotation.AnnotatedBeanDefinitionReader.registerBean(AnnotatedBeanDefinitionReader.java:233)
	at org.springframework.context.annotation.AnnotationConfigApplicationContext.registerBean(AnnotationConfigApplicationContext.java:198)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.registerInstance(SpringComponentContainer.java:106)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.addExtension(SpringComponentContainer.java:122)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.addExtension(SpringComponentContainer.java:220)
	... 19 more

 [2024-12-03T10:01:15.39] [sonarlint-analysis-engine] INFO sonarlint - Index files
 [2024-12-03T10:01:15.39] [Report about progress of file indexation] INFO sonarlint - 1 file indexed
 [2024-12-03T10:01:15.414] [Report about progress of OmniSharp analyzer] INFO sonarlint - 1 source file to be analyzed
 [2024-12-03T10:01:15.737] [Report about progress of OmniSharp analyzer] INFO sonarlint - 1/1 source file has been analyzed
 [2024-12-03T10:01:15.737] [sonarlint-analysis-engine] INFO sonarlint - No CSS, PHP, HTML or VueJS files are found in the project. CSS analysis is skipped.
 [2024-12-03T10:01:15.737] [sonarlint-analysis-engine] INFO sonarlint - Available processors: 12
 [2024-12-03T10:01:15.737] [sonarlint-analysis-engine] INFO sonarlint - Using 12 threads for analysis.
 [2024-12-03T10:01:15.755] [sonarlint-analysis-engine] INFO sonarlint - Analyzing all except non binary files
 [2024-12-03T10:01:15.756] [Progress of the text and secrets analysis] INFO sonarlint - 1 source file to be analyzed
 [2024-12-03T10:01:15.76] [Progress of the text and secrets analysis] INFO sonarlint - 1/1 source file has been analyzed
 [2024-12-03T10:01:15.76] [sonarlint-analysis-engine] INFO sonarlint - Available processors: 12
 [2024-12-03T10:01:15.76] [sonarlint-analysis-engine] INFO sonarlint - Using 12 threads for analysis.
 [2024-12-03T10:01:15.77] [sonarlint-analysis-engine] INFO sonarlint - The property "sonar.tests" is not set. To improve the analysis accuracy, we categorize a file as a test file if any of the following is true:
  * The filename starts with "test"
  * The filename contains "test." or "tests."
  * Any directory in the file path is named: "doc", "docs", "test" or "tests"
  * Any directory in the file path has a name ending in "test" or "tests"

 [2024-12-03T10:01:15.77] [sonarlint-analysis-engine] ERROR sonarlint - Error executing sensor: 'TextAndSecretsSensor'
java.lang.NoClassDefFoundError: Could not initialize class org.sonar.plugins.secrets.api.PreFilterFactory
	at org.sonar.plugins.secrets.api.SecretMatcher.build(SecretMatcher.java:68)
	at org.sonar.plugins.secrets.api.SpecificationBasedCheck.lambda$initializeMatchers$3(SpecificationBasedCheck.java:76)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
	at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
	at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)
	at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622)
	at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627)
	at org.sonar.plugins.secrets.api.SpecificationBasedCheck.initializeMatchers(SpecificationBasedCheck.java:77)
	at org.sonar.plugins.secrets.api.SpecificationBasedCheck.initializeMatchers(SpecificationBasedCheck.java:34)
	at org.sonar.plugins.secrets.api.AbstractSpecificationBasedCheck.initialize(AbstractSpecificationBasedCheck.java:52)
	at org.sonar.plugins.common.TextAndSecretsSensor.lambda$initializeSpecificationBasedChecks$3(TextAndSecretsSensor.java:289)
	at org.sonar.plugins.common.DurationStatistics.lambda$timed$0(DurationStatistics.java:66)
	at org.sonar.plugins.common.DurationStatistics.timed(DurationStatistics.java:78)
	at org.sonar.plugins.common.DurationStatistics.timed(DurationStatistics.java:65)
	at org.sonar.plugins.common.TextAndSecretsSensor.initializeSpecificationBasedChecks(TextAndSecretsSensor.java:286)
	at org.sonar.plugins.common.TextAndSecretsSensor.execute(TextAndSecretsSensor.java:108)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.sensor.SensorsExecutor.executeSensor(SensorsExecutor.java:95)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.sensor.SensorsExecutor.executeSensors(SensorsExecutor.java:86)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.sensor.SensorsExecutor.execute(SensorsExecutor.java:77)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.AnalysisContainer.doAfterStart(AnalysisContainer.java:122)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.startComponents(SpringComponentContainer.java:182)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.execute(SpringComponentContainer.java:161)
	at org.sonarsource.sonarlint.core.analysis.container.module.ModuleContainer.analyze(ModuleContainer.java:71)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.doRunAnalysis(AnalyzeCommand.java:65)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.lambda$execute$0(AnalyzeCommand.java:54)
	at org.sonarsource.sonarlint.core.progress.RpcProgressMonitor.lambda$startTask$0(RpcProgressMonitor.java:44)
	at org.sonarsource.sonarlint.core.progress.TaskManager.startTask(TaskManager.java:61)
	at org.sonarsource.sonarlint.core.progress.RpcProgressMonitor.startTask(RpcProgressMonitor.java:44)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.execute(AnalyzeCommand.java:53)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.execute(AnalyzeCommand.java:34)
	at org.sonarsource.sonarlint.core.analysis.AnalysisEngine$AsyncCommand.execute(AnalysisEngine.java:153)
	at org.sonarsource.sonarlint.core.analysis.AnalysisEngine.executeQueuedCommands(AnalysisEngine.java:71)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.LinkageError: loader constraint violation: loader org.sonar.classloader.ClassRealm @4a2f63b1 wants to load class org.sonar.plugins.common.InputFileContext. A different class with the same name was previously loaded by org.sonar.classloader.ClassRealm @3d382f1b. (org.sonar.plugins.common.InputFileContext is in unnamed module of loader org.sonar.classloader.ClassRealm @3d382f1b, parent loader 'platform') [in thread "sonarlint-analysis-engine"]
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
	at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:524)
	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:427)
	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:421)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:420)
	at org.sonar.classloader.ClassRealm.loadClassFromSelf(ClassRealm.java:125)
	at org.sonar.classloader.ParentFirstStrategy.loadClass(ParentFirstStrategy.java:37)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:87)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:76)
	at org.sonar.plugins.secrets.api.PreFilterFactory.<clinit>(PreFilterFactory.java:42)
	... 37 more

 [2024-12-03T10:01:15.771] [sonarlint-analysis-engine] INFO sonarlint - Analysis detected 1 issue and 0 Security Hotspots in 763ms

Please let me know if you need anything else.

Thanks for the logs. Do you reproduce the problem if you turn off the connected mode?

Yeah the problem is still there.

I just tried disconnecting from SonarCloud and it still shows the “csharpsquid:S2699” false positive. Reconnecting didn’t make a difference either.

Could you please provide the library versions you are using for NUnit and NSubstitute?

As I understand, this issue has never been raised in SonarCloud before, but only recently in SonarLint. Would you be able to pinpoint a specific SonarLint version where this problem started?

On my side, this issue is not raised locally.

Sure, we’re using NUnit v4.2.2 and NSubstitute v5.1.0.

I cannot pinpoint a specific SonarLint version, sorry, but I think it’s only started reporting this relatively recently so perhaps one of the more recent versions?

I think the logs you shared do not have the Analysis logs and Verbose output enabled. Could you please try again with those?

Sorry about that. Here’s the logs with Analysis logs and Verbose output enabled:

Trigger: CURRENT_FILE_ACTION
[CURRENT_FILE_ACTION] 1 file(s) submitted
Configuring analysis with org.sonarlint.intellij.rider.RiderAnalysisConfigurator
Analysing 'SonarLintTest.cs' (ID 2b2f6acd-2001-491c-a998-daf816cc3b1e)...
 [2024-12-05T08:14:34.035] [sonarlint-analysis-engine] DEBUG sonarlint - Language of file "file:///Users/matthewhill/Dev/Test/SonarLintTest.cs" is detected to be "CS"
 [2024-12-05T08:14:34.036] [omnisharp-stdout-stream-consumer-59685] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************ Request ************
{
  "Type": "request",
  "Seq": 168,
  "Command": "/filesChanged",
  "Arguments": [
    {
      "FileName": "/Users/matthewhill/Dev/Test/SonarLintTest.cs",
      "changeType": "Change"
    }
  ]
}
 [2024-12-05T08:14:34.037] [omnisharp-stdout-stream-consumer-59685] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] Read file contents:
using NSubstitute;
using NUnit.Framework;

namespace UnitTests
{
    public interface ITheThingIWantToCall
    {
        string Execute();
    }

    public class TheThingIWantToCall : ITheThingIWantToCall
    {
        public string Execute()
        {
            return "Hello, world!";
        }
    }

    public class TheThingIAmTesting
    {
        private readonly ITheThingIWantToCall _theThingIWantToCall;

        public TheThingIAmTesting(ITheThingIWantToCall theThingIWantToCall)
        {
            _theThingIWantToCall = theThingIWantToCall;
        }

        public string DoTheMagic()
        {
            return _theThingIWantToCall.Execute();
        }
    }
    
    [TestFixture]
    public class MyExampleTest
    {
        private ITheThingIWantToCall _theThingIWantToCall;

        private TheThingIAmTesting _theThingIAmTesting;

        [SetUp]
        public void SetUp()
        {
            _theThingIWantToCall = Substitute.For<ITheThingIWantToCall>();

            _theThingIAmTesting = new TheThingIAmTesting(_theThingIWantToCall);
        }

        [Test]
        public void DoTheMagicCallsTheThingIWantToCallExecute()
        {
            _theThingIAmTesting.DoTheMagic();
            
            _theThingIWantToCall.Received(1).Execute();
        }
    }
}
 [2024-12-05T08:14:34.037] [omnisharp-stdout-stream-consumer-59685] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] Updating file /Users/matthewhill/Dev/Test/SonarLintTest.cs with new text:
using NSubstitute;
using NUnit.Framework;

namespace UnitTests
{
    public interface ITheThingIWantToCall
    {
        string Execute();
    }

    public class TheThingIWantToCall : ITheThingIWantToCall
    {
        public string Execute()
        {
            return "Hello, world!";
        }
    }

    public class TheThingIAmTesting
    {
        private readonly ITheThingIWantToCall _theThingIWantToCall;

        public TheThingIAmTesting(ITheThingIWantToCall theThingIWantToCall)
        {
            _theThingIWantToCall = theThingIWantToCall;
        }

        public string DoTheMagic()
        {
            return _theThingIWantToCall.Execute();
        }
    }
    
    [TestFixture]
    public class MyExampleTest
    {
        private ITheThingIWantToCall _theThingIWantToCall;

        private TheThingIAmTesting _theThingIAmTesting;

        [SetUp]
        public void SetUp()
        {
            _theThingIWantToCall = Substitute.For<ITheThingIWantToCall>();

            _theThingIAmTesting = new TheThingIAmTesting(_theThingIWantToCall);
        }

        [Test]
        public void DoTheMagicCallsTheThingIWantToCallExecute()
        {
            _theThingIAmTesting.DoTheMagic();
            
            _theThingIWantToCall.Received(1).Execute();
        }
    }
}
 [2024-12-05T08:14:34.039] [omnisharp-stdout-stream-consumer-59685] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************  Response (2.8692ms) ************ 
{
  "Request_seq": 168,
  "Command": "/filesChanged",
  "Running": true,
  "Success": true,
  "Message": null,
  "Body": {},
  "Seq": 535323,
  "Type": "response"
}
 [2024-12-05T08:14:34.039] [sonarlint-file-exclusions] DEBUG sonarlint - Computing file exclusion for uri 'file:///Users/matthewhill/Dev/Test/SonarLintTest.cs'
 [2024-12-05T08:14:34.041] [sonarlint-file-exclusions] DEBUG sonarlint - Server excluded sources: 
 [2024-12-05T08:14:34.041] [sonarlint-file-exclusions] DEBUG sonarlint -   **/build-wrapper-dump.json
 [2024-12-05T08:14:34.041] [sonarlint-file-exclusions] DEBUG sonarlint -   **/*SwaggerSetup.cs
 [2024-12-05T08:14:34.041] [sonarlint-file-exclusions] DEBUG sonarlint - File exclusion for uri 'file:///Users/matthewhill/Dev/Test/SonarLintTest.cs' is false
 [2024-12-05T08:14:34.042] [SonarLint Server RPC request executor] DEBUG sonarlint -   * cs: 353 active rules
 [2024-12-05T08:14:34.042] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6639 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.042] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6641 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6096 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5334 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6399 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6287 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6173 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5883 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S3649 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6350 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5144 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5145 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5146 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S2078 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S2076 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S2631 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S2083 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S2091 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5131 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5135 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint -   * css: 24 active rules
 [2024-12-05T08:14:34.043] [SonarLint Server RPC request executor] DEBUG sonarlint -   * web: 48 active rules
 [2024-12-05T08:14:34.044] [SonarLint Server RPC request executor] DEBUG sonarlint -   * js: 326 active rules
 [2024-12-05T08:14:34.044] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5146 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.044] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5147 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.044] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S3649 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.044] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5131 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.044] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S6105 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.044] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5144 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.044] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S6350 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.044] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S2631 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.044] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S2083 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.044] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule parameter 'passwordWords' for rule 'javascript:S2068' does not exist in embedded analyzer, ignoring.
 [2024-12-05T08:14:34.045] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5696 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.045] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5334 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.045] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S2076 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.045] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule javascript:S6418 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.045] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S6096 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.045] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5883 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.045] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S6287 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.046] [SonarLint Server RPC request executor] DEBUG sonarlint -   * secrets: 121 active rules
 [2024-12-05T08:14:34.046] [SonarLint Server RPC request executor] DEBUG sonarlint -   * ts: 325 active rules
 [2024-12-05T08:14:34.046] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5883 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.046] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S6287 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.046] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S2076 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.046] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S2631 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.046] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5696 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.046] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5334 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.046] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S6096 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.046] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule typescript:S6418 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.047] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S6350 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.047] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5144 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.047] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5146 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.047] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5147 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.047] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule parameter 'passwordWords' for rule 'typescript:S2068' does not exist in embedded analyzer, ignoring.
 [2024-12-05T08:14:34.047] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S6105 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.047] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5131 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.047] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S2083 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.047] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S3649 is enabled on the server, but not available in SonarLint
 [2024-12-05T08:14:34.05] [SonarLint Server RPC request executor] INFO sonarlint - Triggering analysis with configuration: [
  baseDir: /Users/matthewhill/Dev/
  extraProperties: {sonar.project.monorepo.enabled=false, sonaranalyzer-cs.nuget.packageVersion=10.3.0.106239, sonaranalyzer.security.cs.pluginVersion=10.9.0.33961, sonar.cs.ignoreHeaderComments=true, sonar.c.file.suffixes=.c,.h, sonar.typescript.file.suffixes=.ts,.tsx,.cts,.mts, sonar.python.coverage.reportPaths=coverage-reports/*coverage-*.xml, sonar.sensor.cache.enable=true, sonaranalyzer-vbnet.nuget.packageVersion=10.3.0.106239, sonar.text.activate=true, sonar.cobol.dialect=ibm-enterprise-cobol, sonar.go.file.suffixes=.go, sonar.cpd.cobol.minimumLines=30, sonar.cobol.exec.recoveryMode=true, block_report_submission_subscription_type=DISABLED, sonar.cs.analyzeRazorCode=true, sonar.locationChecksums=true, sonar.cs.internal.solutionPath=/Users/matthewhill/Dev/Test.sln, email.fromName=SonarCloud, block_project_provisioning_subscription_type=DISABLED, sonar.python.xunit.skipDetails=false, sonar.ipynb.file.suffixes=ipynb, sonar.dbcleaner.weeksBeforeKeepingOnlyAnalysesWithVersion=104, sonar.plsql.jdbc.driver.class=oracle.jdbc.OracleDriver, sonar.pullrequest.github.summary_comment=true, sonar.go.exclusions=**/vendor/**, sonar.php.exclusions=**/vendor/**, sonar.terraform.file.suffixes=.tf, sonar.forceAuthentication=false, sonar.plugins.loadAll=false, java_11_eos_date=2024-01-15, sonar.notifications.delay=60, sonar.cpp.file.suffixes=.cc,.cpp,.cxx,.c++,.hh,.hpp,.hxx,.h++,.ipp,.ixx,.mxx,.cppm,.ccm,.cxxm,.c++m, sonar.swift.file.suffixes=.swift, sonar.vbnet.roslyn.ignoreIssues=false, sonar.plsql.ignoreHeaderComments=false, sonar.flex.file.suffixes=as, sonar.jcl.file.suffixes=.jcl, sonaranalyzer.security.cs.nuget.packageVersion=10.9.0.33961, sonar.filesize.limit=20, sonar.ruby.file.suffixes=.rb, sonaranalyzer-cs.ruleNamespace=SonarAnalyzer.Enterprise.CSharp, sonar.pli.extralingualCharacters=#@$, sonar.cs.analyzeGeneratedCode=false, sonar.azureresourcemanager.file.identifier=https://schema.management.azure.com/schemas/,http://schema.management.azure.com/schemas/, sonar.python.xunit.reportPath=xunit-reports/xunit-result-*.xml, sonar.java.jvmframeworkconfig.file.patterns=**/src/main/resources/**/*app*.properties,**/src/main/resources/**/*app*.yaml,**/src/main/resources/**/*app*.yml, sonar.pli.marginLeft=2, qp.permission.delegate.entitlements.api.enabled=true, sonar.builtInQualityProfiles.disableNotificationOnUpdate=false, sonar.javascript.globals=angular,goog,google,OpenLayers,d3,dojo,dojox,dijit,Backbone,moment,casper,_,sap, sonar.dbcleaner.hoursBeforeKeepingOnlyOneSnapshotByDay=24, sonar.yaml.file.suffixes=.yaml,.yml, ai.code.assurance.entitlements.api.enabled=true, sonar.terraform.activate=true, sonar.pullrequest.provider=GitHub, sonar.css.file.suffixes=.css,.less,.scss,.sass, sonar.organizations.createPersonalOrg=true, sonar.cpd.abap.minimumTokens=100, sonar.docker.file.patterns=Dockerfile,*.dockerfile, delete_old_projects_excluded_project_kees=brave_brave-core,simgrid_simgrid,apache_struts,microsoft_vscode-python,mediawiki-core,jhipster-sample-application,JMeter,typo3,org.xwiki.platform:xwiki-platform,apache_ofbiz-framework,org.nuxeo:nuxeo-ecm,monica,sonarlint-visualstudio, sonar.html.file.suffixes=.html,.xhtml,.cshtml,.vbhtml,.aspx,.ascx,.rhtml,.erb,.shtm,.shtml,.cmp,.twig, sonaranalyzer-vbnet.nuget.packageId=SonarAnalyzer.Enterprise.VisualBasic, sonar.php.frameworkDetection=true, sonar.vb.file.suffixes=.bas,.frm,.ctl, email.from=noreply@sonarcloud.io, sonaranalyzer-vbnet.pluginVersion=10.3.0.106239, sonar.vbnet.ignoreHeaderComments=true, sonar.rpg.leftMarginWidth=12, sonaranalyzer.security.cs.analyzerId=SonarAnalyzer.Security, sonar.scanner.force-deprecated-java-version=false, sonaranalyzer.security.cs.nuget.packageId=SonarAnalyzer.Security, sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByWeek=1, sonaranalyzer-vbnet.analyzerId=SonarAnalyzer.Enterprise.VisualBasic, email.prefix=[SonarCloud], sonar.scala.file.suffixes=.scala, sonar.cs.roslyn.ignoreIssues=false, delete_old_projects_deployment_date=1671634414000, sonar.cobol.byteBasedColumnCount=false, sonar.cloudformation.activate=true, sonar.pli.marginRight=72, sonaranalyzer-cs.pluginKey=csharpenterprise, sonar.kubernetes.activate=true, sonar.cpd.cobol.minimumTokens=100, sonar.java.ignoreUnnamedModuleForSplitPackage=False, sonar.json.file.suffixes=.json, sonar.cs.internal.dotnetCliExeLocation=/usr/local/share/dotnet/dotnet, sonaranalyzer.security.cs.pluginKey=securitycsharpfrontend, sonar.auth.microsoft.enabled=true, sonar.vb.ignoreHeaderComments=true, sonar.apex.file.suffixes=.cls,.trigger, sonaranalyzer-vbnet.ruleNamespace=SonarAnalyzer.Enterprise.VisualBasic, suspend_analysis_of_projects=OXYGEN:*, sonar.cloudformation.file.identifier=AWSTemplateFormatVersion, sonar.lf.logoWidthPx=105, sonar.javascript.ignoreHeaderComments=true, sonar.dbcleaner.daysBeforeDeletingClosedIssues=30, sonar.java.enablePreview=False, sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByMonth=4, sonar.lf.gravatarServerUrl=https://secure.gravatar.com/avatar/{EMAIL_MD5}.jpg?s={SIZE}&d=identicon, sonar.core.serverBaseURL=https://sonarcloud.io, publish_data_events=true, sonar.branch.longLivedBranches.regex=(branch|release|develop).*, sonar.objc.file.suffixes=.m, sonar.autoscan.enabled=false, sonar.ruby.coverage.reportPaths=coverage/.resultset.json, sonar.text.inclusions=**/*.sh,**/*.bash,**/*.zsh,**/*.ksh,**/*.ps1,**/*.properties,**/*.conf,**/*.pem,**/*.config,.env,.aws/config, sonar.cobol.sourceFormat=fixed, rp.entitlements.api.enabled=true, sonar.sensor.cache.baseUrl=https://api.sonarcloud.io/analysis, sonar.qualityProfiles.allowDisableInheritedRules=true, sonaranalyzer-cs.staticResourceName=SonarAnalyzer-10.3.0.106239.zip, sonar.notifications.runningDelayBeforeReportingStatus=600, sonar.cpd.cobol.ignoreLiteral=true, sonar.jsp.file.suffixes=.jsp,.jspf,.jspx, sonar.pli.ignoreHeaderComments=true, sonar.javascript.maxFileSize=1000, sonaranalyzer-cs.nuget.packageId=SonarAnalyzer.Enterprise.CSharp, sonar.javascript.environments=amd,applescript,atomtest,browser,commonjs,embertest,greasemonkey,jasmine,jest,jquery,meteor,mocha,mongo,nashorn,node,phantomjs,prototypejs,protractor,qunit,serviceworker,shared-node-browser,shelljs,webextensions,worker, sonar.cs.internal.msBuildPath=/usr/local/share/dotnet/sdk/8.0.303, sonar.authenticator.downcase=false, sonar.scm.disabled=false, sonar.ruby.exclusions=**/vendor/**, sonar.dart.file.suffixes=.dart, sonar.ansible.activate=true, sonar.vbnet.file.suffixes=.vb, sonar.maintenance_mode.start_date=2023-09-28T09:10:00:00.000+01:00, sonaranalyzer-cs.analyzerId=SonarAnalyzer.Enterprise.CSharp, sonar.sensor.cache.project.enable=true, sonar.rpg.file.suffixes=.rpg,.rpgle,.sqlrpgle,.RPG,.RPGLE,.SQLRPGLE, sonar.core.id=1BD809FA-AWHW8ct9-T_TB3XqouNu, sonar.exclusions=**/*SwaggerSetup.cs, sonar.cobol.adaprep.activation=false, sonar.abap.file.suffixes=.abap,.ab4,.flow,.asprog, sonar.global.exclusions=**/build-wrapper-dump.json, sonar.organizations.anyoneCanCreate=true, sonar.cfamily.ignoreHeaderComments=true, sonar.technicalDebt.ratingGrid=0.05,0.1,0.2,0.5, sonar.technicalDebt.developmentCost=30, sonar.lf.enableGravatar=true, sonar.docker.activate=true, sonar.python.file.suffixes=py, sonaranalyzer-cs.pluginVersion=10.3.0.106239, sonaranalyzer.security.cs.staticResourceName=SonarAnalyzer.Security-10.9.0.33961.zip, sonar.cs.file.suffixes=.cs,.razor, sonar.plsql.file.suffixes=sql,tab,pkb, sonaranalyzer.security.cs.ruleNamespace=SonarAnalyzer.Security, sonar.azureresourcemanager.file.suffixes=.bicep, sonar.javascript.file.suffixes=.js,.jsx,.cjs,.mjs,.vue, sonar.cpd.abap.minimumLines=20, sonar.cobol.tab.width=8, sonar.maintenance_mode.message=SonarCloud will undergo maintenance on Thursday, September 28th.
Automatic Analysis will not be available between 07:00 CET and 09:00 CET, sonaranalyzer-vbnet.staticResourceName=SonarAnalyzer-10.3.0.106239.zip, sonar.text.inclusions.activate=true, sonar.vbnet.analyzeGeneratedCode=false, sonar.pli.file.suffixes=.pli, sonar.java.file.suffixes=.java,.jav, sonar.kotlin.file.suffixes=.kt,.kts, sonar.php.file.suffixes=php,php3,php4,php5,phtml,inc, sonar.scanner.skipNodeProvisioning=false, sonar.xml.file.suffixes=.xml,.xsd,.xsl,.config, sonar.dbcleaner.weeksBeforeDeletingAllSnapshots=260, sonaranalyzer-vbnet.pluginKey=vbnetenterprise, sonar.maintenance_mode.link=https://community.sonarsource.com/t/sonarcloud-autoscan-maintenance-september-28th-07-00-and-09-00-cet/101442, sonar.azureresourcemanager.activate=true, sonar.java.jvmframeworkconfig.activate=true, sonar.maxLinesOfCodePerFile=2000000, sonar.tsql.file.suffixes=.tsql, sonar.core.startTime=2024-12-02T15:38:25+0100}
  activeRules: [24 css, 48 Web, 333 csharpsquid, 309 typescript, 121 secrets, 310 javascript]
  inputFiles: [
    file:///Users/matthewhill/Dev/Test/SonarLintTest.cs (UTF-8)
  ]
]

 [2024-12-05T08:14:34.292] [sonarlint-analysis-engine] ERROR sonarlint - Error loading components for plugin 'text'
java.lang.IllegalStateException: Unable to register extension org.sonar.api.config.PropertyDefinition from plugin 'text'
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.addExtension(SpringComponentContainer.java:222)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.addExtension(SpringComponentContainer.java:37)
	at org.sonarsource.sonarlint.core.plugin.commons.ExtensionInstaller.loadExtensions(ExtensionInstaller.java:64)
	at org.sonarsource.sonarlint.core.plugin.commons.ExtensionInstaller.install(ExtensionInstaller.java:53)
	at org.sonarsource.sonarlint.core.analysis.container.global.AnalysisExtensionInstaller.install(AnalysisExtensionInstaller.java:44)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.AnalysisContainer.addPluginExtensions(AnalysisContainer.java:114)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.AnalysisContainer.doBeforeStart(AnalysisContainer.java:63)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.startComponents(SpringComponentContainer.java:180)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.execute(SpringComponentContainer.java:161)
	at org.sonarsource.sonarlint.core.analysis.container.module.ModuleContainer.analyze(ModuleContainer.java:71)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.doRunAnalysis(AnalyzeCommand.java:65)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.lambda$execute$0(AnalyzeCommand.java:54)
	at org.sonarsource.sonarlint.core.progress.RpcProgressMonitor.lambda$startTask$0(RpcProgressMonitor.java:44)
	at org.sonarsource.sonarlint.core.progress.TaskManager.startTask(TaskManager.java:61)
	at org.sonarsource.sonarlint.core.progress.RpcProgressMonitor.startTask(RpcProgressMonitor.java:44)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.execute(AnalyzeCommand.java:53)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.execute(AnalyzeCommand.java:34)
	at org.sonarsource.sonarlint.core.analysis.AnalysisEngine$AsyncCommand.execute(AnalysisEngine.java:153)
	at org.sonarsource.sonarlint.core.analysis.AnalysisEngine.executeQueuedCommands(AnalysisEngine.java:71)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'jdk.internal.loader.ClassLoaders$AppClassLoader@67424e82-org.sonar.api.config.PropertyDefinition-sonar.text.activate' defined in null: Cannot register bean definition [Generic bean: class [org.sonar.api.config.PropertyDefinition]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] for bean 'jdk.internal.loader.ClassLoaders$AppClassLoader@67424e82-org.sonar.api.config.PropertyDefinition-sonar.text.activate': There is already [Generic bean: class [org.sonar.api.config.PropertyDefinition]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] bound.
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(DefaultListableBeanFactory.java:1006)
	at org.springframework.context.support.GenericApplicationContext.registerBeanDefinition(GenericApplicationContext.java:342)
	at org.springframework.beans.factory.support.BeanDefinitionReaderUtils.registerBeanDefinition(BeanDefinitionReaderUtils.java:164)
	at org.springframework.context.annotation.AnnotatedBeanDefinitionReader.doRegisterBean(AnnotatedBeanDefinitionReader.java:285)
	at org.springframework.context.annotation.AnnotatedBeanDefinitionReader.registerBean(AnnotatedBeanDefinitionReader.java:233)
	at org.springframework.context.annotation.AnnotationConfigApplicationContext.registerBean(AnnotationConfigApplicationContext.java:198)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.registerInstance(SpringComponentContainer.java:106)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.addExtension(SpringComponentContainer.java:122)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.addExtension(SpringComponentContainer.java:220)
	... 19 more

 [2024-12-05T08:14:34.293] [sonarlint-analysis-engine] DEBUG sonarlint - Start analysis
 [2024-12-05T08:14:34.294] [sonarlint-analysis-engine] INFO sonarlint - Index files
 [2024-12-05T08:14:34.294] [sonarlint-analysis-engine] DEBUG sonarlint - Language of file "file:///Users/matthewhill/Dev/Test/SonarLintTest.cs" is detected to be "CS"
 [2024-12-05T08:14:34.294] [Report about progress of file indexation] INFO sonarlint - 1 file indexed
 [2024-12-05T08:14:34.296] [sonarlint-analysis-engine] DEBUG sonarlint - Added 309 checks for language='ts', repository='typescript'
 [2024-12-05T08:14:34.296] [sonarlint-analysis-engine] DEBUG sonarlint - Added 310 checks for language='js', repository='javascript'
 [2024-12-05T08:14:34.297] [sonarlint-analysis-engine] DEBUG sonarlint - No registered JsAnalysisConsumer.
 [2024-12-05T08:14:34.298] [sonarlint-analysis-engine] DEBUG sonarlint - Execute Sensor: OmniSharp
 [2024-12-05T08:14:34.299] [omnisharp-stdout-stream-consumer-59685] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************ Request ************
{
  "Type": "request",
  "Seq": 169,
  "Command": "/sonarlint/config",
  "Arguments": {
    "activeRules": [
      {
        "ruleId": "S1854"
      },
      {
        "ruleId": "S4200"
      },
      {
        "ruleId": "S2386"
      },
      {
        "ruleId": "S4201"
      },
      {
        "ruleId": "S5773"
      },
      {
        "ruleId": "S3597"
      },
      {
        "ruleId": "S3598"
      },
      {
        "ruleId": "S3236"
      },
      {
        "ruleId": "S3237"
      },
      {
        "ruleId": "S3358"
      },
      {
        "ruleId": "S5659"
      },
      {
        "ruleId": "S2701"
      },
      {
        "ruleId": "S3928"
      },
      {
        "ruleId": "S1862"
      },
      {
        "ruleId": "S1066"
      },
      {
        "ruleId": "S1186"
      },
      {
        "ruleId": "S1185"
      },
      {
        "ruleId": "S4581"
      },
      {
        "ruleId": "S3251"
      },
      {
        "ruleId": "S3241"
      },
      {
        "ruleId": "S3363"
      },
      {
        "ruleId": "S4210"
      },
      {
        "ruleId": "S1192",
        "params": {
          "threshold": "3"
        }
      },
      {
        "ruleId": "S2275"
      },
      {
        "ruleId": "S4211"
      },
      {
        "ruleId": "S3244"
      },
      {
        "ruleId": "S5542"
      },
      {
        "ruleId": "S3246"
      },
      {
        "ruleId": "S4456"
      },
      {
        "ruleId": "S3005"
      },
      {
        "ruleId": "S3247"
      },
      {
        "ruleId": "S4457"
      },
      {
        "ruleId": "S5547"
      },
      {
        "ruleId": "S3249"
      },
      {
        "ruleId": "S2953"
      },
      {
        "ruleId": "S2955"
      },
      {
        "ruleId": "S3923"
      },
      {
        "ruleId": "S3925"
      },
      {
        "ruleId": "S3926"
      },
      {
        "ruleId": "S3927"
      },
      {
        "ruleId": "S1155"
      },
      {
        "ruleId": "S4790"
      },
      {
        "ruleId": "S3450"
      },
      {
        "ruleId": "S6960"
      },
      {
        "ruleId": "S3330"
      },
      {
        "ruleId": "S3451"
      },
      {
        "ruleId": "S6962"
      },
      {
        "ruleId": "S3453"
      },
      {
        "ruleId": "S4663"
      },
      {
        "ruleId": "S6961"
      },
      {
        "ruleId": "S2123"
      },
      {
        "ruleId": "S2365"
      },
      {
        "ruleId": "S2486"
      },
      {
        "ruleId": "S6964"
      },
      {
        "ruleId": "S2245"
      },
      {
        "ruleId": "S4423"
      },
      {
        "ruleId": "S5753"
      },
      {
        "ruleId": "S3456"
      },
      {
        "ruleId": "S4545"
      },
      {
        "ruleId": "S6603"
      },
      {
        "ruleId": "S6966"
      },
      {
        "ruleId": "S2368"
      },
      {
        "ruleId": "S3457"
      },
      {
        "ruleId": "S6602"
      },
      {
        "ruleId": "S6965"
      },
      {
        "ruleId": "S3458"
      },
      {
        "ruleId": "S4426"
      },
      {
        "ruleId": "S6605"
      },
      {
        "ruleId": "S6968"
      },
      {
        "ruleId": "S3217"
      },
      {
        "ruleId": "S3459"
      },
      {
        "ruleId": "S6967"
      },
      {
        "ruleId": "S3218"
      },
      {
        "ruleId": "S4428"
      },
      {
        "ruleId": "S6607"
      },
      {
        "ruleId": "S6609"
      },
      {
        "ruleId": "S6608"
      },
      {
        "ruleId": "S2925"
      },
      {
        "ruleId": "S1848"
      },
      {
        "ruleId": "S1048"
      },
      {
        "ruleId": "S1168"
      },
      {
        "ruleId": "S1163"
      },
      {
        "ruleId": "S1172"
      },
      {
        "ruleId": "S2251"
      },
      {
        "ruleId": "S2372"
      },
      {
        "ruleId": "S2252"
      },
      {
        "ruleId": "S3220"
      },
      {
        "ruleId": "S6610"
      },
      {
        "ruleId": "S818"
      },
      {
        "ruleId": "S3343"
      },
      {
        "ruleId": "S3464"
      },
      {
        "ruleId": "S2376"
      },
      {
        "ruleId": "S4433"
      },
      {
        "ruleId": "S6612"
      },
      {
        "ruleId": "S3466"
      },
      {
        "ruleId": "S2257"
      },
      {
        "ruleId": "S3346"
      },
      {
        "ruleId": "S5766"
      },
      {
        "ruleId": "S6613"
      },
      {
        "ruleId": "S2259"
      },
      {
        "ruleId": "S2930"
      },
      {
        "ruleId": "S2139"
      },
      {
        "ruleId": "S6618"
      },
      {
        "ruleId": "S2933"
      },
      {
        "ruleId": "S6617"
      },
      {
        "ruleId": "S2934"
      },
      {
        "ruleId": "S3903"
      },
      {
        "ruleId": "S3904"
      },
      {
        "ruleId": "S1607"
      },
      {
        "ruleId": "S1135"
      },
      {
        "ruleId": "S1134"
      },
      {
        "ruleId": "S1133"
      },
      {
        "ruleId": "S2583"
      },
      {
        "ruleId": "S2342",
        "params": {
          "flagsAttributeFormat": "^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?s$",
          "format": "^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$"
        }
      },
      {
        "ruleId": "S3431"
      },
      {
        "ruleId": "S2222"
      },
      {
        "ruleId": "S2223"
      },
      {
        "ruleId": "S2344"
      },
      {
        "ruleId": "S3433"
      },
      {
        "ruleId": "S2345"
      },
      {
        "ruleId": "S2225"
      },
      {
        "ruleId": "S2346"
      },
      {
        "ruleId": "S4524"
      },
      {
        "ruleId": "S2589"
      },
      {
        "ruleId": "S5856"
      },
      {
        "ruleId": "S1939"
      },
      {
        "ruleId": "S1944"
      },
      {
        "ruleId": "S1940"
      },
      {
        "ruleId": "S1144"
      },
      {
        "ruleId": "S1264"
      },
      {
        "ruleId": "S3440"
      },
      {
        "ruleId": "S3442"
      },
      {
        "ruleId": "S3443"
      },
      {
        "ruleId": "S2234"
      },
      {
        "ruleId": "S3444"
      },
      {
        "ruleId": "S2114"
      },
      {
        "ruleId": "S3445"
      },
      {
        "ruleId": "S2115"
      },
      {
        "ruleId": "S2479"
      },
      {
        "ruleId": "S3447"
      },
      {
        "ruleId": "S3449"
      },
      {
        "ruleId": "S3329"
      },
      {
        "ruleId": "S1118"
      },
      {
        "ruleId": "S1117"
      },
      {
        "ruleId": "S1116"
      },
      {
        "ruleId": "S1479",
        "params": {
          "maximum": "30"
        }
      },
      {
        "ruleId": "S4070"
      },
      {
        "ruleId": "S1110"
      },
      {
        "ruleId": "S5042"
      },
      {
        "ruleId": "S2681"
      },
      {
        "ruleId": "S5034"
      },
      {
        "ruleId": "S2201"
      },
      {
        "ruleId": "S2445"
      },
      {
        "ruleId": "S3655"
      },
      {
        "ruleId": "S3776",
        "params": {
          "propertyThreshold": "3",
          "threshold": "15"
        }
      },
      {
        "ruleId": "S3897"
      },
      {
        "ruleId": "S4502"
      },
      {
        "ruleId": "S6800"
      },
      {
        "ruleId": "S2325"
      },
      {
        "ruleId": "S2688"
      },
      {
        "ruleId": "S2326"
      },
      {
        "ruleId": "S3415"
      },
      {
        "ruleId": "S2328"
      },
      {
        "ruleId": "S4507"
      },
      {
        "ruleId": "S1006"
      },
      {
        "ruleId": "S1125"
      },
      {
        "ruleId": "S1123"
      },
      {
        "ruleId": "S1244"
      },
      {
        "ruleId": "S1121"
      },
      {
        "ruleId": "S1481"
      },
      {
        "ruleId": "S6377"
      },
      {
        "ruleId": "S2692"
      },
      {
        "ruleId": "S6931"
      },
      {
        "ruleId": "S2696"
      },
      {
        "ruleId": "S6930"
      },
      {
        "ruleId": "S6932"
      },
      {
        "ruleId": "S2699"
      },
      {
        "ruleId": "S4635"
      },
      {
        "ruleId": "S6934"
      },
      {
        "ruleId": "S3427"
      },
      {
        "ruleId": "S2219"
      },
      {
        "ruleId": "S1215"
      },
      {
        "ruleId": "S1699"
      },
      {
        "ruleId": "S1696"
      },
      {
        "ruleId": "S1210"
      },
      {
        "ruleId": "S1694"
      },
      {
        "ruleId": "S4050"
      },
      {
        "ruleId": "S1450"
      },
      {
        "ruleId": "S4052"
      },
      {
        "ruleId": "S6588"
      },
      {
        "ruleId": "S3871"
      },
      {
        "ruleId": "S3993"
      },
      {
        "ruleId": "S3875"
      },
      {
        "ruleId": "S3877"
      },
      {
        "ruleId": "S3998"
      },
      {
        "ruleId": "S3878"
      },
      {
        "ruleId": "S2306"
      },
      {
        "ruleId": "S1104"
      },
      {
        "ruleId": "S4061"
      },
      {
        "ruleId": "S3881"
      },
      {
        "ruleId": "S2551"
      },
      {
        "ruleId": "S2674"
      },
      {
        "ruleId": "S3400"
      },
      {
        "ruleId": "S3885"
      },
      {
        "ruleId": "S3887"
      },
      {
        "ruleId": "S2436",
        "params": {
          "max": "2",
          "maxMethod": "3"
        }
      },
      {
        "ruleId": "S2437"
      },
      {
        "ruleId": "S3889"
      },
      {
        "ruleId": "S1905"
      },
      {
        "ruleId": "S1313"
      },
      {
        "ruleId": "S2092"
      },
      {
        "ruleId": "S3060"
      },
      {
        "ruleId": "S2094"
      },
      {
        "ruleId": "S3063"
      },
      {
        "ruleId": "S4143"
      },
      {
        "ruleId": "S4144"
      },
      {
        "ruleId": "S6444"
      },
      {
        "ruleId": "S2761"
      },
      {
        "ruleId": "S3971"
      },
      {
        "ruleId": "S3972"
      },
      {
        "ruleId": "S3610"
      },
      {
        "ruleId": "S3973"
      },
      {
        "ruleId": "S1206"
      },
      {
        "ruleId": "S6580"
      },
      {
        "ruleId": "S4275"
      },
      {
        "ruleId": "S6575"
      },
      {
        "ruleId": "S5122"
      },
      {
        "ruleId": "S4035"
      },
      {
        "ruleId": "S4277"
      },
      {
        "ruleId": "S3981"
      },
      {
        "ruleId": "S4036"
      },
      {
        "ruleId": "S4158"
      },
      {
        "ruleId": "S4830"
      },
      {
        "ruleId": "S4159"
      },
      {
        "ruleId": "S3984"
      },
      {
        "ruleId": "S3626"
      },
      {
        "ruleId": "S3869"
      },
      {
        "ruleId": "S1656"
      },
      {
        "ruleId": "S2190"
      },
      {
        "ruleId": "S6670"
      },
      {
        "ruleId": "S6672"
      },
      {
        "ruleId": "S5332"
      },
      {
        "ruleId": "S6420"
      },
      {
        "ruleId": "S2187"
      },
      {
        "ruleId": "S3397"
      },
      {
        "ruleId": "S3398"
      },
      {
        "ruleId": "S4487"
      },
      {
        "ruleId": "S6422"
      },
      {
        "ruleId": "S6664",
        "params": {
          "warningThreshold": "1",
          "debugThreshold": "4",
          "informationThreshold": "2",
          "errorThreshold": "1"
        }
      },
      {
        "ruleId": "S927"
      },
      {
        "ruleId": "S2068",
        "params": {
          "credentialWords": "password, passwd, pwd, passphrase"
        }
      },
      {
        "ruleId": "S6667"
      },
      {
        "ruleId": "S6424"
      },
      {
        "ruleId": "S6669",
        "params": {
          "format": "^_?[Ll]og(ger)?$"
        }
      },
      {
        "ruleId": "S6668"
      },
      {
        "ruleId": "S2743"
      },
      {
        "ruleId": "S125"
      },
      {
        "ruleId": "S127"
      },
      {
        "ruleId": "S2629"
      },
      {
        "ruleId": "S110",
        "params": {
          "max": "5"
        }
      },
      {
        "ruleId": "S112"
      },
      {
        "ruleId": "S4260"
      },
      {
        "ruleId": "S3172"
      },
      {
        "ruleId": "S6562"
      },
      {
        "ruleId": "S6561"
      },
      {
        "ruleId": "S6674"
      },
      {
        "ruleId": "S6673"
      },
      {
        "ruleId": "S2077"
      },
      {
        "ruleId": "S6797"
      },
      {
        "ruleId": "S5344"
      },
      {
        "ruleId": "S6675"
      },
      {
        "ruleId": "S3168"
      },
      {
        "ruleId": "S4015"
      },
      {
        "ruleId": "S4136"
      },
      {
        "ruleId": "S3169"
      },
      {
        "ruleId": "S6677"
      },
      {
        "ruleId": "S6798"
      },
      {
        "ruleId": "S2995"
      },
      {
        "ruleId": "S3600"
      },
      {
        "ruleId": "S3963"
      },
      {
        "ruleId": "S2996"
      },
      {
        "ruleId": "S4019"
      },
      {
        "ruleId": "S2755"
      },
      {
        "ruleId": "S2997"
      },
      {
        "ruleId": "S3603"
      },
      {
        "ruleId": "S3966"
      },
      {
        "ruleId": "S2757"
      },
      {
        "ruleId": "S3604"
      },
      {
        "ruleId": "S101"
      },
      {
        "ruleId": "S1994"
      },
      {
        "ruleId": "S1751"
      },
      {
        "ruleId": "S1871"
      },
      {
        "ruleId": "S1199"
      },
      {
        "ruleId": "S2290"
      },
      {
        "ruleId": "S2291"
      },
      {
        "ruleId": "S2292"
      },
      {
        "ruleId": "S3260"
      },
      {
        "ruleId": "S1075"
      },
      {
        "ruleId": "S3261"
      },
      {
        "ruleId": "S3262"
      },
      {
        "ruleId": "S3010"
      },
      {
        "ruleId": "S4220"
      },
      {
        "ruleId": "S4583"
      },
      {
        "ruleId": "S3011"
      },
      {
        "ruleId": "S6640"
      },
      {
        "ruleId": "S2166"
      },
      {
        "ruleId": "S3376"
      },
      {
        "ruleId": "S4586"
      },
      {
        "ruleId": "S3256"
      },
      {
        "ruleId": "S907"
      },
      {
        "ruleId": "S108"
      },
      {
        "ruleId": "S107",
        "params": {
          "max": "10"
        }
      },
      {
        "ruleId": "S1643"
      },
      {
        "ruleId": "S1764"
      },
      {
        "ruleId": "S2183"
      },
      {
        "ruleId": "S5693",
        "params": {
          "fileUploadSizeLimit": "8000000"
        }
      },
      {
        "ruleId": "S2184"
      },
      {
        "ruleId": "S6781"
      },
      {
        "ruleId": "S2053"
      },
      {
        "ruleId": "S3263"
      },
      {
        "ruleId": "S3264"
      },
      {
        "ruleId": "S3265"
      },
      {
        "ruleId": "S5443"
      },
      {
        "ruleId": "S2178"
      },
      {
        "ruleId": "S2970"
      },
      {
        "ruleId": "S3267"
      },
      {
        "ruleId": "S2971"
      },
      {
        "ruleId": "S5445"
      },
      {
        "ruleId": "S2612"
      },
      {
        "ruleId": "S6419"
      },
      {
        "ruleId": "S2857"
      },
      {
        "ruleId": "S2737"
      },
      {
        "ruleId": "S3949"
      }
    ]
  }
}
 [2024-12-05T08:14:34.308] [omnisharp-stdout-stream-consumer-59685] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************  Response (9.9767ms) ************ 
{
  "Request_seq": 169,
  "Command": "/sonarlint/config",
  "Running": true,
  "Success": true,
  "Message": null,
  "Body": true,
  "Seq": 535331,
  "Type": "response"
}
 [2024-12-05T08:14:34.308] [Report about progress of OmniSharp analyzer] INFO sonarlint - 1 source file to be analyzed
 [2024-12-05T08:14:34.308] [omnisharp-stdout-stream-consumer-59685] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************ Request ************
{
  "Type": "request",
  "Seq": 170,
  "Command": "/updatebuffer",
  "Arguments": {
    "FileName": "/Users/matthewhill/Dev/Test/SonarLintTest.cs",
    "Buffer": "using NSubstitute;\r\nusing NUnit.Framework;\r\n\r\nnamespace UnitTests\r\n{\r\n    public interface ITheThingIWantToCall\r\n    {\r\n        string Execute();\r\n    }\r\n\r\n    public class TheThingIWantToCall : ITheThingIWantToCall\r\n    {\r\n        public string Execute()\r\n        {\r\n            return \"Hello, world!\";\r\n        }\r\n    }\r\n\r\n    public class TheThingIAmTesting\r\n    {\r\n        private readonly ITheThingIWantToCall _theThingIWantToCall;\r\n\r\n        public TheThingIAmTesting(ITheThingIWantToCall theThingIWantToCall)\r\n        {\r\n            _theThingIWantToCall = theThingIWantToCall;\r\n        }\r\n\r\n        public string DoTheMagic()\r\n        {\r\n            return _theThingIWantToCall.Execute();\r\n        }\r\n    }\r\n    \r\n    [TestFixture]\r\n    public class MyExampleTest\r\n    {\r\n        private ITheThingIWantToCall _theThingIWantToCall;\r\n\r\n        private TheThingIAmTesting _theThingIAmTesting;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            _theThingIWantToCall = Substitute.For<ITheThingIWantToCall>();\r\n\r\n            _theThingIAmTesting = new TheThingIAmTesting(_theThingIWantToCall);\r\n        }\r\n\r\n        [Test]\r\n        public void DoTheMagicCallsTheThingIWantToCallExecute()\r\n        {\r\n            _theThingIAmTesting.DoTheMagic();\r\n            \r\n            _theThingIWantToCall.Received(1).Execute();\r\n        }\r\n    }\r\n}"
  }
}
 [2024-12-05T08:14:34.308] [omnisharp-stdout-stream-consumer-59685] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] Updating file /Users/matthewhill/Dev/Test/SonarLintTest.cs with new text:
using NSubstitute;
using NUnit.Framework;

namespace UnitTests
{
    public interface ITheThingIWantToCall
    {
        string Execute();
    }

    public class TheThingIWantToCall : ITheThingIWantToCall
    {
        public string Execute()
        {
            return "Hello, world!";
        }
    }

    public class TheThingIAmTesting
    {
        private readonly ITheThingIWantToCall _theThingIWantToCall;

        public TheThingIAmTesting(ITheThingIWantToCall theThingIWantToCall)
        {
            _theThingIWantToCall = theThingIWantToCall;
        }

        public string DoTheMagic()
        {
            return _theThingIWantToCall.Execute();
        }
    }
    
    [TestFixture]
    public class MyExampleTest
    {
        private ITheThingIWantToCall _theThingIWantToCall;

        private TheThingIAmTesting _theThingIAmTesting;

        [SetUp]
        public void SetUp()
        {
            _theThingIWantToCall = Substitute.For<ITheThingIWantToCall>();

            _theThingIAmTesting = new TheThingIAmTesting(_theThingIWantToCall);
        }

        [Test]
        public void DoTheMagicCallsTheThingIWantToCallExecute()
        {
            _theThingIAmTesting.DoTheMagic();
            
            _theThingIWantToCall.Received(1).Execute();
        }
    }
}
 [2024-12-05T08:14:34.309] [omnisharp-stdout-stream-consumer-59685] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************  Response (0.6257ms) ************ 
{
  "Request_seq": 170,
  "Command": "/updatebuffer",
  "Running": true,
  "Success": true,
  "Message": null,
  "Body": true,
  "Seq": 535334,
  "Type": "response"
}
 [2024-12-05T08:14:34.309] [omnisharp-stdout-stream-consumer-59685] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************ Request ************
{
  "Type": "request",
  "Seq": 171,
  "Command": "/sonarlint/codecheck",
  "Arguments": {
    "FileName": "/Users/matthewhill/Dev/Test/SonarLintTest.cs"
  }
}
 [2024-12-05T08:14:34.487] [omnisharp-stdout-stream-consumer-59685] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************  Response (178.0827ms) ************ 
{
  "Request_seq": 171,
  "Command": "/sonarlint/codecheck",
  "Running": true,
  "Success": true,
  "Message": null,
  "Body": {
    "QuickFixes": [
      {
        "AdditionalLocations": [],
        "QuickFixes": [],
        "LogLevel": "Warning",
        "Id": "S2699",
        "Tags": [],
        "FileName": "/Users/matthewhill/Dev/Test/SonarLintTest.cs",
        "Line": 50,
        "Column": 21,
        "EndLine": 50,
        "EndColumn": 62,
        "Text": "Add at least one assertion to this test case.",
        "Projects": [
          "Tests"
        ]
      }
    ]
  },
  "Seq": 535338,
  "Type": "response"
}
 [2024-12-05T08:14:34.488] [sonarlint-analysis-engine] DEBUG sonarlint - Initializing metadata of file file:///Users/matthewhill/Dev/Test/SonarLintTest.cs
 [2024-12-05T08:14:34.489] [Report about progress of OmniSharp analyzer] INFO sonarlint - 1/1 source file has been analyzed
 [2024-12-05T08:14:34.489] [sonarlint-analysis-engine] DEBUG sonarlint - Execute Sensor: HTML
 [2024-12-05T08:14:34.489] [sonarlint-analysis-engine] DEBUG sonarlint - 'JavaScript/TypeScript analysis' skipped because there are no related files in the current project
 [2024-12-05T08:14:34.489] [sonarlint-analysis-engine] DEBUG sonarlint - 'JavaScript inside YAML analysis' skipped because there are no related files in the current project
 [2024-12-05T08:14:34.489] [sonarlint-analysis-engine] DEBUG sonarlint - 'JavaScript inside HTML analysis' skipped because there are no related files in the current project
 [2024-12-05T08:14:34.489] [sonarlint-analysis-engine] DEBUG sonarlint - Execute Sensor: CSS Rules
 [2024-12-05T08:14:34.489] [sonarlint-analysis-engine] INFO sonarlint - No CSS, PHP, HTML or VueJS files are found in the project. CSS analysis is skipped.
 [2024-12-05T08:14:34.489] [sonarlint-analysis-engine] DEBUG sonarlint - Execute Sensor: EnterpriseTextAndSecretsSensor
 [2024-12-05T08:14:34.489] [sonarlint-analysis-engine] INFO sonarlint - Available processors: 12
 [2024-12-05T08:14:34.489] [sonarlint-analysis-engine] INFO sonarlint - Using 12 threads for analysis.
 [2024-12-05T08:14:34.502] [sonarlint-analysis-engine] INFO sonarlint - Analyzing all except non binary files
 [2024-12-05T08:14:34.503] [Progress of the text and secrets analysis] INFO sonarlint - 1 source file to be analyzed
 [2024-12-05T08:14:34.505] [Progress of the text and secrets analysis] INFO sonarlint - 1/1 source file has been analyzed
 [2024-12-05T08:14:34.505] [sonarlint-analysis-engine] DEBUG sonarlint - Execute Sensor: TextAndSecretsSensor
 [2024-12-05T08:14:34.506] [sonarlint-analysis-engine] INFO sonarlint - Available processors: 12
 [2024-12-05T08:14:34.506] [sonarlint-analysis-engine] INFO sonarlint - Using 12 threads for analysis.
 [2024-12-05T08:14:34.514] [sonarlint-analysis-engine] INFO sonarlint - The property "sonar.tests" is not set. To improve the analysis accuracy, we categorize a file as a test file if any of the following is true:
  * The filename starts with "test"
  * The filename contains "test." or "tests."
  * Any directory in the file path is named: "doc", "docs", "test" or "tests"
  * Any directory in the file path has a name ending in "test" or "tests"

 [2024-12-05T08:14:34.514] [sonarlint-analysis-engine] ERROR sonarlint - Error executing sensor: 'TextAndSecretsSensor'
java.lang.NoClassDefFoundError: Could not initialize class org.sonar.plugins.secrets.api.PreFilterFactory
	at org.sonar.plugins.secrets.api.SecretMatcher.build(SecretMatcher.java:68)
	at org.sonar.plugins.secrets.api.SpecificationBasedCheck.lambda$initializeMatchers$3(SpecificationBasedCheck.java:76)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
	at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
	at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)
	at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622)
	at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627)
	at org.sonar.plugins.secrets.api.SpecificationBasedCheck.initializeMatchers(SpecificationBasedCheck.java:77)
	at org.sonar.plugins.secrets.api.SpecificationBasedCheck.initializeMatchers(SpecificationBasedCheck.java:34)
	at org.sonar.plugins.secrets.api.AbstractSpecificationBasedCheck.initialize(AbstractSpecificationBasedCheck.java:52)
	at org.sonar.plugins.common.TextAndSecretsSensor.lambda$initializeSpecificationBasedChecks$3(TextAndSecretsSensor.java:289)
	at org.sonar.plugins.common.DurationStatistics.lambda$timed$0(DurationStatistics.java:66)
	at org.sonar.plugins.common.DurationStatistics.timed(DurationStatistics.java:78)
	at org.sonar.plugins.common.DurationStatistics.timed(DurationStatistics.java:65)
	at org.sonar.plugins.common.TextAndSecretsSensor.initializeSpecificationBasedChecks(TextAndSecretsSensor.java:286)
	at org.sonar.plugins.common.TextAndSecretsSensor.execute(TextAndSecretsSensor.java:108)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.sensor.SensorsExecutor.executeSensor(SensorsExecutor.java:95)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.sensor.SensorsExecutor.executeSensors(SensorsExecutor.java:86)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.sensor.SensorsExecutor.execute(SensorsExecutor.java:77)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.AnalysisContainer.doAfterStart(AnalysisContainer.java:122)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.startComponents(SpringComponentContainer.java:182)
	at org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer.execute(SpringComponentContainer.java:161)
	at org.sonarsource.sonarlint.core.analysis.container.module.ModuleContainer.analyze(ModuleContainer.java:71)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.doRunAnalysis(AnalyzeCommand.java:65)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.lambda$execute$0(AnalyzeCommand.java:54)
	at org.sonarsource.sonarlint.core.progress.RpcProgressMonitor.lambda$startTask$0(RpcProgressMonitor.java:44)
	at org.sonarsource.sonarlint.core.progress.TaskManager.startTask(TaskManager.java:61)
	at org.sonarsource.sonarlint.core.progress.RpcProgressMonitor.startTask(RpcProgressMonitor.java:44)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.execute(AnalyzeCommand.java:53)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.execute(AnalyzeCommand.java:34)
	at org.sonarsource.sonarlint.core.analysis.AnalysisEngine$AsyncCommand.execute(AnalysisEngine.java:153)
	at org.sonarsource.sonarlint.core.analysis.AnalysisEngine.executeQueuedCommands(AnalysisEngine.java:71)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.LinkageError: loader constraint violation: loader org.sonar.classloader.ClassRealm @4a2f63b1 wants to load class org.sonar.plugins.common.InputFileContext. A different class with the same name was previously loaded by org.sonar.classloader.ClassRealm @3d382f1b. (org.sonar.plugins.common.InputFileContext is in unnamed module of loader org.sonar.classloader.ClassRealm @3d382f1b, parent loader 'platform') [in thread "sonarlint-analysis-engine"]
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
	at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:524)
	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:427)
	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:421)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:420)
	at org.sonar.classloader.ClassRealm.loadClassFromSelf(ClassRealm.java:125)
	at org.sonar.classloader.ParentFirstStrategy.loadClass(ParentFirstStrategy.java:37)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:87)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:76)
	at org.sonar.plugins.secrets.api.PreFilterFactory.<clinit>(PreFilterFactory.java:42)
	... 37 more

 [2024-12-05T08:14:34.514] [sonarlint-analysis-engine] INFO sonarlint - Analysis detected 1 issue and 0 Security Hotspots in 479ms

Hey @matthewhill-fgf, sorry for the slight delay - I’m still investigating the case.

Could you please try again with SonarQube for IDE version 10.13.1 (the latest version)? It would be best if you could share the logs again on this new version, as you did previously.
I don’t think it will fix the issue, but because we refactored things related to C# analysis, it’s preferable if we can work together on this version.

Hey, that’s all good.

I’ve updated my SonarLint plugin to v10.13.1.80133 and have analysed the file again:

Trigger: CURRENT_FILE_ACTION
[CURRENT_FILE_ACTION] 1 file(s) submitted
Configuring analysis with org.sonarlint.intellij.rider.RiderAnalysisConfigurator
Analysing 'SonarLintTest.cs' (ID f7d9d8ee-6ac7-4c13-a2d5-e8894d02decd)...
 [2024-12-11T11:31:37.348] [SonarLint Server RPC request executor] DEBUG sonarlint -   * cs: 353 active rules
 [2024-12-11T11:31:37.348] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6639 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.348] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6641 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6096 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5334 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6399 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6287 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6173 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5883 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S3649 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S6350 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5144 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5145 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5146 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S2078 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S2076 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S2631 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S2083 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S2091 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5131 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule roslyn.sonaranalyzer.security.cs:S5135 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint -   * css: 24 active rules
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint -   * web: 48 active rules
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint -   * js: 326 active rules
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5146 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5147 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S3649 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.349] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5131 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.35] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S6105 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.35] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5144 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.35] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S6350 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.35] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S2631 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.35] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S2083 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.35] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5696 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.35] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5334 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.35] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S2076 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.35] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S6096 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.35] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S5883 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.35] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule jssecurity:S6287 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.35] [SonarLint Server RPC request executor] DEBUG sonarlint -   * secrets: 121 active rules
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint -   * ts: 325 active rules
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5883 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S6287 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S2076 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S2631 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5696 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5334 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S6096 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S6350 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5144 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5146 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5147 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S6105 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S5131 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.351] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S2083 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.352] [SonarLint Server RPC request executor] DEBUG sonarlint - Rule tssecurity:S3649 is enabled on the server, but not available in SonarLint
 [2024-12-11T11:31:37.355] [SonarLint Server RPC request executor] INFO sonarlint - Triggering analysis with configuration: [
  baseDir: /Users/matthewhill/Dev
  extraProperties: {sonar.project.monorepo.enabled=false, sonaranalyzer-cs.nuget.packageVersion=10.3.0.106239, sonaranalyzer.security.cs.pluginVersion=10.9.0.33961, sonar.cs.ignoreHeaderComments=true, sonar.c.file.suffixes=.c,.h, sonar.typescript.file.suffixes=.ts,.tsx,.cts,.mts, sonar.python.coverage.reportPaths=coverage-reports/*coverage-*.xml, sonar.sensor.cache.enable=true, sonaranalyzer-vbnet.nuget.packageVersion=10.3.0.106239, sonar.text.activate=true, sonar.cobol.dialect=ibm-enterprise-cobol, sonar.go.file.suffixes=.go, sonar.cpd.cobol.minimumLines=30, sonar.cobol.exec.recoveryMode=true, block_report_submission_subscription_type=DISABLED, sonar.cs.analyzeRazorCode=true, sonar.locationChecksums=true, sonar.cs.internal.solutionPath=/Users/matthewhill/Dev/Test.sln, email.fromName=SonarCloud, block_project_provisioning_subscription_type=DISABLED, sonar.python.xunit.skipDetails=false, sonar.ipynb.file.suffixes=ipynb, sonar.dbcleaner.weeksBeforeKeepingOnlyAnalysesWithVersion=104, sonar.plsql.jdbc.driver.class=oracle.jdbc.OracleDriver, sonar.pullrequest.github.summary_comment=true, sonar.go.exclusions=**/vendor/**, sonar.php.exclusions=**/vendor/**, sonar.terraform.file.suffixes=.tf, sonar.forceAuthentication=false, sonar.plugins.loadAll=false, java_11_eos_date=2024-01-15, sonar.notifications.delay=60, sonar.cpp.file.suffixes=.cc,.cpp,.cxx,.c++,.hh,.hpp,.hxx,.h++,.ipp,.ixx,.mxx,.cppm,.ccm,.cxxm,.c++m, sonar.swift.file.suffixes=.swift, sonar.vbnet.roslyn.ignoreIssues=false, sonar.plsql.ignoreHeaderComments=false, sonar.flex.file.suffixes=as, sonar.jcl.file.suffixes=.jcl, sonaranalyzer.security.cs.nuget.packageVersion=10.9.0.33961, sonar.filesize.limit=20, sonar.ruby.file.suffixes=.rb, sonaranalyzer-cs.ruleNamespace=SonarAnalyzer.Enterprise.CSharp, sonar.pli.extralingualCharacters=#@$, sonar.cs.analyzeGeneratedCode=false, sonar.azureresourcemanager.file.identifier=https://schema.management.azure.com/schemas/,http://schema.management.azure.com/schemas/, sonar.python.xunit.reportPath=xunit-reports/xunit-result-*.xml, sonar.java.jvmframeworkconfig.file.patterns=**/src/main/resources/**/*app*.properties,**/src/main/resources/**/*app*.yaml,**/src/main/resources/**/*app*.yml, sonar.pli.marginLeft=2, sonar.builtInQualityProfiles.disableNotificationOnUpdate=false, sonar.javascript.globals=angular,goog,google,OpenLayers,d3,dojo,dojox,dijit,Backbone,moment,casper,_,sap, sonar.dbcleaner.hoursBeforeKeepingOnlyOneSnapshotByDay=24, sonar.yaml.file.suffixes=.yaml,.yml, sonar.terraform.activate=true, sonar.pullrequest.provider=GitHub, sonar.css.file.suffixes=.css,.less,.scss,.sass, sonar.organizations.createPersonalOrg=true, sonar.cpd.abap.minimumTokens=100, sonar.docker.file.patterns=Dockerfile,*.dockerfile, delete_old_projects_excluded_project_kees=brave_brave-core,simgrid_simgrid,apache_struts,microsoft_vscode-python,mediawiki-core,jhipster-sample-application,JMeter,typo3,org.xwiki.platform:xwiki-platform,apache_ofbiz-framework,org.nuxeo:nuxeo-ecm,monica,sonarlint-visualstudio, sonar.html.file.suffixes=.html,.xhtml,.cshtml,.vbhtml,.aspx,.ascx,.rhtml,.erb,.shtm,.shtml,.cmp,.twig, sonaranalyzer-vbnet.nuget.packageId=SonarAnalyzer.Enterprise.VisualBasic, sonar.php.frameworkDetection=true, sonar.vb.file.suffixes=.bas,.frm,.ctl, email.from=noreply@sonarcloud.io, sonaranalyzer-vbnet.pluginVersion=10.3.0.106239, sonar.vbnet.ignoreHeaderComments=true, sonar.rpg.leftMarginWidth=12, sonaranalyzer.security.cs.analyzerId=SonarAnalyzer.Security, sonar.scanner.force-deprecated-java-version=false, sonaranalyzer.security.cs.nuget.packageId=SonarAnalyzer.Security, sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByWeek=1, sonaranalyzer-vbnet.analyzerId=SonarAnalyzer.Enterprise.VisualBasic, email.prefix=[SonarCloud], sonar.scala.file.suffixes=.scala, sonar.cs.roslyn.ignoreIssues=false, delete_old_projects_deployment_date=1671634414000, sonar.cobol.byteBasedColumnCount=false, sonar.cloudformation.activate=true, sonar.pli.marginRight=72, sonaranalyzer-cs.pluginKey=csharpenterprise, sonar.kubernetes.activate=true, sonar.cpd.cobol.minimumTokens=100, sonar.java.ignoreUnnamedModuleForSplitPackage=False, sonar.json.file.suffixes=.json, sonar.cs.internal.dotnetCliExeLocation=/usr/local/share/dotnet/dotnet, sonaranalyzer.security.cs.pluginKey=securitycsharpfrontend, sonar.auth.microsoft.enabled=true, sonar.vb.ignoreHeaderComments=true, sonar.apex.file.suffixes=.cls,.trigger, sonaranalyzer-vbnet.ruleNamespace=SonarAnalyzer.Enterprise.VisualBasic, suspend_analysis_of_projects=OXYGEN:*, sonar.cloudformation.file.identifier=AWSTemplateFormatVersion, sonar.lf.logoWidthPx=105, sonar.javascript.ignoreHeaderComments=true, sonar.dbcleaner.daysBeforeDeletingClosedIssues=30, sonar.java.enablePreview=False, sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByMonth=4, sonar.lf.gravatarServerUrl=https://secure.gravatar.com/avatar/{EMAIL_MD5}.jpg?s={SIZE}&d=identicon, sonar.core.serverBaseURL=https://sonarcloud.io, publish_data_events=true, sonar.branch.longLivedBranches.regex=(branch|release|develop).*, sonar.objc.file.suffixes=.m, sonar.autoscan.enabled=false, sonar.ruby.coverage.reportPaths=coverage/.resultset.json, sonar.text.inclusions=**/*.sh,**/*.bash,**/*.zsh,**/*.ksh,**/*.ps1,**/*.properties,**/*.conf,**/*.pem,**/*.config,.env,.aws/config, sonar.cobol.sourceFormat=fixed, rp.entitlements.api.enabled=true, sonar.sensor.cache.baseUrl=https://api.sonarcloud.io/analysis, sonar.qualityProfiles.allowDisableInheritedRules=true, sonaranalyzer-cs.staticResourceName=SonarAnalyzer-10.3.0.106239.zip, sonar.notifications.runningDelayBeforeReportingStatus=600, sonar.cpd.cobol.ignoreLiteral=true, sonar.jsp.file.suffixes=.jsp,.jspf,.jspx, sonar.pli.ignoreHeaderComments=true, sonar.javascript.maxFileSize=1000, sonaranalyzer-cs.nuget.packageId=SonarAnalyzer.Enterprise.CSharp, sonar.javascript.environments=amd,applescript,atomtest,browser,commonjs,embertest,greasemonkey,jasmine,jest,jquery,meteor,mocha,mongo,nashorn,node,phantomjs,prototypejs,protractor,qunit,serviceworker,shared-node-browser,shelljs,webextensions,worker, sonar.cs.internal.msBuildPath=/usr/local/share/dotnet/sdk/8.0.303, sonar.authenticator.downcase=false, sonar.scm.disabled=false, sonar.ruby.exclusions=**/vendor/**, sonar.dart.file.suffixes=.dart, sonar.ansible.activate=true, sonar.vbnet.file.suffixes=.vb, sonar.maintenance_mode.start_date=2023-09-28T09:10:00:00.000+01:00, sonaranalyzer-cs.analyzerId=SonarAnalyzer.Enterprise.CSharp, sonar.sensor.cache.project.enable=true, sonar.rpg.file.suffixes=.rpg,.rpgle,.sqlrpgle,.RPG,.RPGLE,.SQLRPGLE, sonar.core.id=1BD809FA-AWHW8ct9-T_TB3XqouNu, sonar.exclusions=**/*SwaggerSetup.cs, sonar.cobol.adaprep.activation=false, sonar.abap.file.suffixes=.abap,.ab4,.flow,.asprog, sonar.global.exclusions=**/build-wrapper-dump.json, sonar.organizations.anyoneCanCreate=true, sonar.cfamily.ignoreHeaderComments=true, sonar.technicalDebt.ratingGrid=0.05,0.1,0.2,0.5, sonar.technicalDebt.developmentCost=30, sonar.lf.enableGravatar=true, sonar.docker.activate=true, sonar.python.file.suffixes=py, sonaranalyzer-cs.pluginVersion=10.3.0.106239, sonaranalyzer.security.cs.staticResourceName=SonarAnalyzer.Security-10.9.0.33961.zip, sonar.cs.file.suffixes=.cs,.razor, sonar.plsql.file.suffixes=sql,tab,pkb, sonaranalyzer.security.cs.ruleNamespace=SonarAnalyzer.Security, sonar.azureresourcemanager.file.suffixes=.bicep, sonar.javascript.file.suffixes=.js,.jsx,.cjs,.mjs,.vue, sonar.cpd.abap.minimumLines=20, sonar.cobol.tab.width=8, sonar.maintenance_mode.message=SonarCloud will undergo maintenance on Thursday, September 28th.
Automatic Analysis will not be available between 07:00 CET and 09:00 CET, sonaranalyzer-vbnet.staticResourceName=SonarAnalyzer-10.3.0.106239.zip, sonar.text.inclusions.activate=true, sonar.vbnet.analyzeGeneratedCode=false, sonar.pli.file.suffixes=.pli, sonar.java.file.suffixes=.java,.jav, sonar.kotlin.file.suffixes=.kt,.kts, sonar.php.file.suffixes=php,php3,php4,php5,phtml,inc, sonar.scanner.skipNodeProvisioning=false, sonar.xml.file.suffixes=.xml,.xsd,.xsl,.config, sonar.dbcleaner.weeksBeforeDeletingAllSnapshots=260, sonaranalyzer-vbnet.pluginKey=vbnetenterprise, sonar.maintenance_mode.link=https://community.sonarsource.com/t/sonarcloud-autoscan-maintenance-september-28th-07-00-and-09-00-cet/101442, sonar.azureresourcemanager.activate=true, sonar.java.jvmframeworkconfig.activate=true, sonar.maxLinesOfCodePerFile=2000000, sonar.tsql.file.suffixes=.tsql, sonar.core.startTime=2024-12-10T11:28:20+0100}
  activeRules: [24 css, 48 Web, 333 csharpsquid, 310 typescript, 121 secrets, 311 javascript]
  inputFiles: [
    file:///Users/matthewhill/Dev/UnitTests/SonarLintTest.cs (UTF-8)
  ]
]

 [2024-12-11T11:31:37.585] [sonarlint-analysis-engine] DEBUG sonarlint - Start analysis
 [2024-12-11T11:31:37.587] [sonarlint-analysis-engine] INFO sonarlint - Index files
 [2024-12-11T11:31:37.588] [sonarlint-analysis-engine] DEBUG sonarlint - Language of file "file:///Users/matthewhill/Dev/UnitTests/SonarLintTest.cs" is detected to be "CS"
 [2024-12-11T11:31:37.588] [Report about progress of file indexation] INFO sonarlint - 1 file indexed
 [2024-12-11T11:31:37.59] [sonarlint-analysis-engine] DEBUG sonarlint - Added 310 checks for language='ts', repository='typescript'
 [2024-12-11T11:31:37.591] [sonarlint-analysis-engine] DEBUG sonarlint - Added 311 checks for language='js', repository='javascript'
 [2024-12-11T11:31:37.593] [sonarlint-analysis-engine] DEBUG sonarlint - No registered JsAnalysisConsumer.
 [2024-12-11T11:31:37.594] [sonarlint-analysis-engine] DEBUG sonarlint - Execute Sensor: HTML
 [2024-12-11T11:31:37.594] [sonarlint-analysis-engine] DEBUG sonarlint - Execute Sensor: OmniSharp
 [2024-12-11T11:31:37.595] [omnisharp-stdout-stream-consumer-67687] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************ Request ************
{
  "Type": "request",
  "Seq": 14,
  "Command": "/sonarlint/config",
  "Arguments": {
    "activeRules": [
      {
        "ruleId": "S1854"
      },
      {
        "ruleId": "S4200"
      },
      {
        "ruleId": "S2386"
      },
      {
        "ruleId": "S4201"
      },
      {
        "ruleId": "S5773"
      },
      {
        "ruleId": "S3597"
      },
      {
        "ruleId": "S3598"
      },
      {
        "ruleId": "S3236"
      },
      {
        "ruleId": "S3237"
      },
      {
        "ruleId": "S3358"
      },
      {
        "ruleId": "S5659"
      },
      {
        "ruleId": "S2701"
      },
      {
        "ruleId": "S3928"
      },
      {
        "ruleId": "S1862"
      },
      {
        "ruleId": "S1066"
      },
      {
        "ruleId": "S1186"
      },
      {
        "ruleId": "S1185"
      },
      {
        "ruleId": "S4581"
      },
      {
        "ruleId": "S3251"
      },
      {
        "ruleId": "S3241"
      },
      {
        "ruleId": "S3363"
      },
      {
        "ruleId": "S4210"
      },
      {
        "ruleId": "S1192",
        "params": {
          "threshold": "3"
        }
      },
      {
        "ruleId": "S2275"
      },
      {
        "ruleId": "S4211"
      },
      {
        "ruleId": "S3244"
      },
      {
        "ruleId": "S5542"
      },
      {
        "ruleId": "S3246"
      },
      {
        "ruleId": "S4456"
      },
      {
        "ruleId": "S3005"
      },
      {
        "ruleId": "S3247"
      },
      {
        "ruleId": "S4457"
      },
      {
        "ruleId": "S5547"
      },
      {
        "ruleId": "S3249"
      },
      {
        "ruleId": "S2953"
      },
      {
        "ruleId": "S2955"
      },
      {
        "ruleId": "S3923"
      },
      {
        "ruleId": "S3925"
      },
      {
        "ruleId": "S3926"
      },
      {
        "ruleId": "S3927"
      },
      {
        "ruleId": "S1155"
      },
      {
        "ruleId": "S4790"
      },
      {
        "ruleId": "S3450"
      },
      {
        "ruleId": "S6960"
      },
      {
        "ruleId": "S3330"
      },
      {
        "ruleId": "S3451"
      },
      {
        "ruleId": "S6962"
      },
      {
        "ruleId": "S3453"
      },
      {
        "ruleId": "S4663"
      },
      {
        "ruleId": "S6961"
      },
      {
        "ruleId": "S2123"
      },
      {
        "ruleId": "S2365"
      },
      {
        "ruleId": "S2486"
      },
      {
        "ruleId": "S6964"
      },
      {
        "ruleId": "S2245"
      },
      {
        "ruleId": "S4423"
      },
      {
        "ruleId": "S5753"
      },
      {
        "ruleId": "S3456"
      },
      {
        "ruleId": "S4545"
      },
      {
        "ruleId": "S6603"
      },
      {
        "ruleId": "S6966"
      },
      {
        "ruleId": "S2368"
      },
      {
        "ruleId": "S3457"
      },
      {
        "ruleId": "S6602"
      },
      {
        "ruleId": "S6965"
      },
      {
        "ruleId": "S3458"
      },
      {
        "ruleId": "S4426"
      },
      {
        "ruleId": "S6605"
      },
      {
        "ruleId": "S6968"
      },
      {
        "ruleId": "S3217"
      },
      {
        "ruleId": "S3459"
      },
      {
        "ruleId": "S6967"
      },
      {
        "ruleId": "S3218"
      },
      {
        "ruleId": "S4428"
      },
      {
        "ruleId": "S6607"
      },
      {
        "ruleId": "S6609"
      },
      {
        "ruleId": "S6608"
      },
      {
        "ruleId": "S2925"
      },
      {
        "ruleId": "S1848"
      },
      {
        "ruleId": "S1048"
      },
      {
        "ruleId": "S1168"
      },
      {
        "ruleId": "S1163"
      },
      {
        "ruleId": "S1172"
      },
      {
        "ruleId": "S2251"
      },
      {
        "ruleId": "S2372"
      },
      {
        "ruleId": "S2252"
      },
      {
        "ruleId": "S3220"
      },
      {
        "ruleId": "S6610"
      },
      {
        "ruleId": "S818"
      },
      {
        "ruleId": "S3343"
      },
      {
        "ruleId": "S3464"
      },
      {
        "ruleId": "S2376"
      },
      {
        "ruleId": "S4433"
      },
      {
        "ruleId": "S6612"
      },
      {
        "ruleId": "S3466"
      },
      {
        "ruleId": "S2257"
      },
      {
        "ruleId": "S3346"
      },
      {
        "ruleId": "S5766"
      },
      {
        "ruleId": "S6613"
      },
      {
        "ruleId": "S2259"
      },
      {
        "ruleId": "S2930"
      },
      {
        "ruleId": "S2139"
      },
      {
        "ruleId": "S6618"
      },
      {
        "ruleId": "S2933"
      },
      {
        "ruleId": "S6617"
      },
      {
        "ruleId": "S2934"
      },
      {
        "ruleId": "S3903"
      },
      {
        "ruleId": "S3904"
      },
      {
        "ruleId": "S1607"
      },
      {
        "ruleId": "S1135"
      },
      {
        "ruleId": "S1134"
      },
      {
        "ruleId": "S1133"
      },
      {
        "ruleId": "S2583"
      },
      {
        "ruleId": "S2342",
        "params": {
          "flagsAttributeFormat": "^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?s$",
          "format": "^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$"
        }
      },
      {
        "ruleId": "S3431"
      },
      {
        "ruleId": "S2222"
      },
      {
        "ruleId": "S2223"
      },
      {
        "ruleId": "S2344"
      },
      {
        "ruleId": "S3433"
      },
      {
        "ruleId": "S2345"
      },
      {
        "ruleId": "S2225"
      },
      {
        "ruleId": "S2346"
      },
      {
        "ruleId": "S4524"
      },
      {
        "ruleId": "S2589"
      },
      {
        "ruleId": "S5856"
      },
      {
        "ruleId": "S1939"
      },
      {
        "ruleId": "S1944"
      },
      {
        "ruleId": "S1940"
      },
      {
        "ruleId": "S1144"
      },
      {
        "ruleId": "S1264"
      },
      {
        "ruleId": "S3440"
      },
      {
        "ruleId": "S3442"
      },
      {
        "ruleId": "S3443"
      },
      {
        "ruleId": "S2234"
      },
      {
        "ruleId": "S3444"
      },
      {
        "ruleId": "S2114"
      },
      {
        "ruleId": "S3445"
      },
      {
        "ruleId": "S2115"
      },
      {
        "ruleId": "S2479"
      },
      {
        "ruleId": "S3447"
      },
      {
        "ruleId": "S3449"
      },
      {
        "ruleId": "S3329"
      },
      {
        "ruleId": "S1118"
      },
      {
        "ruleId": "S1117"
      },
      {
        "ruleId": "S1116"
      },
      {
        "ruleId": "S1479",
        "params": {
          "maximum": "30"
        }
      },
      {
        "ruleId": "S4070"
      },
      {
        "ruleId": "S1110"
      },
      {
        "ruleId": "S5042"
      },
      {
        "ruleId": "S2681"
      },
      {
        "ruleId": "S5034"
      },
      {
        "ruleId": "S2201"
      },
      {
        "ruleId": "S2445"
      },
      {
        "ruleId": "S3655"
      },
      {
        "ruleId": "S3776",
        "params": {
          "threshold": "15",
          "propertyThreshold": "3"
        }
      },
      {
        "ruleId": "S3897"
      },
      {
        "ruleId": "S4502"
      },
      {
        "ruleId": "S6800"
      },
      {
        "ruleId": "S2325"
      },
      {
        "ruleId": "S2688"
      },
      {
        "ruleId": "S2326"
      },
      {
        "ruleId": "S3415"
      },
      {
        "ruleId": "S2328"
      },
      {
        "ruleId": "S4507"
      },
      {
        "ruleId": "S1006"
      },
      {
        "ruleId": "S1125"
      },
      {
        "ruleId": "S1123"
      },
      {
        "ruleId": "S1244"
      },
      {
        "ruleId": "S1121"
      },
      {
        "ruleId": "S1481"
      },
      {
        "ruleId": "S6377"
      },
      {
        "ruleId": "S2692"
      },
      {
        "ruleId": "S6931"
      },
      {
        "ruleId": "S2696"
      },
      {
        "ruleId": "S6930"
      },
      {
        "ruleId": "S6932"
      },
      {
        "ruleId": "S2699"
      },
      {
        "ruleId": "S4635"
      },
      {
        "ruleId": "S6934"
      },
      {
        "ruleId": "S3427"
      },
      {
        "ruleId": "S2219"
      },
      {
        "ruleId": "S1215"
      },
      {
        "ruleId": "S1699"
      },
      {
        "ruleId": "S1696"
      },
      {
        "ruleId": "S1210"
      },
      {
        "ruleId": "S1694"
      },
      {
        "ruleId": "S4050"
      },
      {
        "ruleId": "S1450"
      },
      {
        "ruleId": "S4052"
      },
      {
        "ruleId": "S6588"
      },
      {
        "ruleId": "S3871"
      },
      {
        "ruleId": "S3993"
      },
      {
        "ruleId": "S3875"
      },
      {
        "ruleId": "S3877"
      },
      {
        "ruleId": "S3998"
      },
      {
        "ruleId": "S3878"
      },
      {
        "ruleId": "S2306"
      },
      {
        "ruleId": "S1104"
      },
      {
        "ruleId": "S4061"
      },
      {
        "ruleId": "S3881"
      },
      {
        "ruleId": "S2551"
      },
      {
        "ruleId": "S2674"
      },
      {
        "ruleId": "S3400"
      },
      {
        "ruleId": "S3885"
      },
      {
        "ruleId": "S3887"
      },
      {
        "ruleId": "S2436",
        "params": {
          "max": "2",
          "maxMethod": "3"
        }
      },
      {
        "ruleId": "S2437"
      },
      {
        "ruleId": "S3889"
      },
      {
        "ruleId": "S1905"
      },
      {
        "ruleId": "S1313"
      },
      {
        "ruleId": "S2092"
      },
      {
        "ruleId": "S3060"
      },
      {
        "ruleId": "S2094"
      },
      {
        "ruleId": "S3063"
      },
      {
        "ruleId": "S4143"
      },
      {
        "ruleId": "S4144"
      },
      {
        "ruleId": "S6444"
      },
      {
        "ruleId": "S2761"
      },
      {
        "ruleId": "S3971"
      },
      {
        "ruleId": "S3972"
      },
      {
        "ruleId": "S3610"
      },
      {
        "ruleId": "S3973"
      },
      {
        "ruleId": "S1206"
      },
      {
        "ruleId": "S6580"
      },
      {
        "ruleId": "S4275"
      },
      {
        "ruleId": "S6575"
      },
      {
        "ruleId": "S5122"
      },
      {
        "ruleId": "S4035"
      },
      {
        "ruleId": "S4277"
      },
      {
        "ruleId": "S3981"
      },
      {
        "ruleId": "S4036"
      },
      {
        "ruleId": "S4158"
      },
      {
        "ruleId": "S4830"
      },
      {
        "ruleId": "S4159"
      },
      {
        "ruleId": "S3984"
      },
      {
        "ruleId": "S3626"
      },
      {
        "ruleId": "S3869"
      },
      {
        "ruleId": "S1656"
      },
      {
        "ruleId": "S2190"
      },
      {
        "ruleId": "S6670"
      },
      {
        "ruleId": "S6672"
      },
      {
        "ruleId": "S5332"
      },
      {
        "ruleId": "S6420"
      },
      {
        "ruleId": "S2187"
      },
      {
        "ruleId": "S3397"
      },
      {
        "ruleId": "S3398"
      },
      {
        "ruleId": "S4487"
      },
      {
        "ruleId": "S6422"
      },
      {
        "ruleId": "S6664",
        "params": {
          "informationThreshold": "2",
          "debugThreshold": "4",
          "warningThreshold": "1",
          "errorThreshold": "1"
        }
      },
      {
        "ruleId": "S927"
      },
      {
        "ruleId": "S2068",
        "params": {
          "credentialWords": "password, passwd, pwd, passphrase"
        }
      },
      {
        "ruleId": "S6667"
      },
      {
        "ruleId": "S6424"
      },
      {
        "ruleId": "S6669",
        "params": {
          "format": "^_?[Ll]og(ger)?$"
        }
      },
      {
        "ruleId": "S6668"
      },
      {
        "ruleId": "S2743"
      },
      {
        "ruleId": "S125"
      },
      {
        "ruleId": "S127"
      },
      {
        "ruleId": "S2629"
      },
      {
        "ruleId": "S110",
        "params": {
          "max": "5"
        }
      },
      {
        "ruleId": "S112"
      },
      {
        "ruleId": "S4260"
      },
      {
        "ruleId": "S3172"
      },
      {
        "ruleId": "S6562"
      },
      {
        "ruleId": "S6561"
      },
      {
        "ruleId": "S6674"
      },
      {
        "ruleId": "S6673"
      },
      {
        "ruleId": "S2077"
      },
      {
        "ruleId": "S6797"
      },
      {
        "ruleId": "S5344"
      },
      {
        "ruleId": "S6675"
      },
      {
        "ruleId": "S3168"
      },
      {
        "ruleId": "S4015"
      },
      {
        "ruleId": "S4136"
      },
      {
        "ruleId": "S3169"
      },
      {
        "ruleId": "S6677"
      },
      {
        "ruleId": "S6798"
      },
      {
        "ruleId": "S2995"
      },
      {
        "ruleId": "S3600"
      },
      {
        "ruleId": "S3963"
      },
      {
        "ruleId": "S2996"
      },
      {
        "ruleId": "S4019"
      },
      {
        "ruleId": "S2755"
      },
      {
        "ruleId": "S2997"
      },
      {
        "ruleId": "S3603"
      },
      {
        "ruleId": "S3966"
      },
      {
        "ruleId": "S2757"
      },
      {
        "ruleId": "S3604"
      },
      {
        "ruleId": "S101"
      },
      {
        "ruleId": "S1994"
      },
      {
        "ruleId": "S1751"
      },
      {
        "ruleId": "S1871"
      },
      {
        "ruleId": "S1199"
      },
      {
        "ruleId": "S2290"
      },
      {
        "ruleId": "S2291"
      },
      {
        "ruleId": "S2292"
      },
      {
        "ruleId": "S3260"
      },
      {
        "ruleId": "S1075"
      },
      {
        "ruleId": "S3261"
      },
      {
        "ruleId": "S3262"
      },
      {
        "ruleId": "S3010"
      },
      {
        "ruleId": "S4220"
      },
      {
        "ruleId": "S4583"
      },
      {
        "ruleId": "S3011"
      },
      {
        "ruleId": "S6640"
      },
      {
        "ruleId": "S2166"
      },
      {
        "ruleId": "S3376"
      },
      {
        "ruleId": "S4586"
      },
      {
        "ruleId": "S3256"
      },
      {
        "ruleId": "S907"
      },
      {
        "ruleId": "S108"
      },
      {
        "ruleId": "S107",
        "params": {
          "max": "10"
        }
      },
      {
        "ruleId": "S1643"
      },
      {
        "ruleId": "S1764"
      },
      {
        "ruleId": "S2183"
      },
      {
        "ruleId": "S5693",
        "params": {
          "fileUploadSizeLimit": "8000000"
        }
      },
      {
        "ruleId": "S2184"
      },
      {
        "ruleId": "S6781"
      },
      {
        "ruleId": "S2053"
      },
      {
        "ruleId": "S3263"
      },
      {
        "ruleId": "S3264"
      },
      {
        "ruleId": "S3265"
      },
      {
        "ruleId": "S5443"
      },
      {
        "ruleId": "S2178"
      },
      {
        "ruleId": "S2970"
      },
      {
        "ruleId": "S3267"
      },
      {
        "ruleId": "S2971"
      },
      {
        "ruleId": "S5445"
      },
      {
        "ruleId": "S2612"
      },
      {
        "ruleId": "S6419"
      },
      {
        "ruleId": "S2857"
      },
      {
        "ruleId": "S2737"
      },
      {
        "ruleId": "S3949"
      }
    ]
  }
}
 [2024-12-11T11:31:37.595] [omnisharp-stdout-stream-consumer-67687] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************  Response (1.1385ms) ************ 
{
  "Request_seq": 14,
  "Command": "/sonarlint/config",
  "Running": true,
  "Success": true,
  "Message": null,
  "Body": true,
  "Seq": 2074,
  "Type": "response"
}
 [2024-12-11T11:31:37.596] [Report about progress of OmniSharp analyzer] INFO sonarlint - 1 source file to be analyzed
 [2024-12-11T11:31:37.596] [omnisharp-stdout-stream-consumer-67687] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************ Request ************
{
  "Type": "request",
  "Seq": 15,
  "Command": "/updatebuffer",
  "Arguments": {
    "FileName": "/Users/matthewhill/Dev/UnitTests/SonarLintTest.cs",
    "Buffer": "using NSubstitute;\r\nusing NUnit.Framework;\r\n\r\nnamespace UnitTests\r\n{\r\n    public interface ITheThingIWantToCall\r\n    {\r\n        string Execute();\r\n    }\r\n\r\n    public class TheThingIWantToCall : ITheThingIWantToCall\r\n    {\r\n        public string Execute()\r\n        {\r\n            return \"Hello, world!\";\r\n        }\r\n    }\r\n\r\n    public class TheThingIAmTesting\r\n    {\r\n        private readonly ITheThingIWantToCall _theThingIWantToCall;\r\n\r\n        public TheThingIAmTesting(ITheThingIWantToCall theThingIWantToCall)\r\n        {\r\n            _theThingIWantToCall = theThingIWantToCall;\r\n        }\r\n\r\n        public string DoTheMagic()\r\n        {\r\n            return _theThingIWantToCall.Execute();\r\n        }\r\n    }\r\n    \r\n    [TestFixture]\r\n    public class MyExampleTest\r\n    {\r\n        private ITheThingIWantToCall _theThingIWantToCall;\r\n\r\n        private TheThingIAmTesting _theThingIAmTesting;\r\n\r\n        [SetUp]\r\n        public void SetUp()\r\n        {\r\n            _theThingIWantToCall = Substitute.For<ITheThingIWantToCall>();\r\n\r\n            _theThingIAmTesting = new TheThingIAmTesting(_theThingIWantToCall);\r\n        }\r\n\r\n        [Test]\r\n        public void DoTheMagicCallsTheThingIWantToCallExecute()\r\n        {\r\n            _theThingIAmTesting.DoTheMagic();\r\n            \r\n            _theThingIWantToCall.Received(1).Execute();\r\n        }\r\n    }\r\n}"
  }
}
 [2024-12-11T11:31:37.596] [omnisharp-stdout-stream-consumer-67687] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] Updating file /Users/matthewhill/Dev/UnitTests/SonarLintTest.cs with new text:
using NSubstitute;
using NUnit.Framework;

namespace UnitTests
{
    public interface ITheThingIWantToCall
    {
        string Execute();
    }

    public class TheThingIWantToCall : ITheThingIWantToCall
    {
        public string Execute()
        {
            return "Hello, world!";
        }
    }

    public class TheThingIAmTesting
    {
        private readonly ITheThingIWantToCall _theThingIWantToCall;

        public TheThingIAmTesting(ITheThingIWantToCall theThingIWantToCall)
        {
            _theThingIWantToCall = theThingIWantToCall;
        }

        public string DoTheMagic()
        {
            return _theThingIWantToCall.Execute();
        }
    }
    
    [TestFixture]
    public class MyExampleTest
    {
        private ITheThingIWantToCall _theThingIWantToCall;

        private TheThingIAmTesting _theThingIAmTesting;

        [SetUp]
        public void SetUp()
        {
            _theThingIWantToCall = Substitute.For<ITheThingIWantToCall>();

            _theThingIAmTesting = new TheThingIAmTesting(_theThingIWantToCall);
        }

        [Test]
        public void DoTheMagicCallsTheThingIWantToCallExecute()
        {
            _theThingIAmTesting.DoTheMagic();
            
            _theThingIWantToCall.Received(1).Execute();
        }
    }
}
 [2024-12-11T11:31:37.597] [omnisharp-stdout-stream-consumer-67687] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************  Response (0.8849ms) ************ 
{
  "Request_seq": 15,
  "Command": "/updatebuffer",
  "Running": true,
  "Success": true,
  "Message": null,
  "Body": true,
  "Seq": 2077,
  "Type": "response"
}
 [2024-12-11T11:31:37.597] [omnisharp-stdout-stream-consumer-67687] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************ Request ************
{
  "Type": "request",
  "Seq": 16,
  "Command": "/sonarlint/codecheck",
  "Arguments": {
    "FileName": "/Users/matthewhill/Dev/UnitTests/SonarLintTest.cs"
  }
}
 [2024-12-11T11:31:37.914] [omnisharp-stdout-stream-consumer-67687] DEBUG org.sonarsource.sonarlint.omnisharp.protocol.OmnisharpResponseProcessor - Omnisharp: [DEBUG] ************  Response (317.2875ms) ************ 
{
  "Request_seq": 16,
  "Command": "/sonarlint/codecheck",
  "Running": true,
  "Success": true,
  "Message": null,
  "Body": {
    "QuickFixes": [
      {
        "AdditionalLocations": [],
        "QuickFixes": [],
        "LogLevel": "Warning",
        "Id": "S2699",
        "Tags": [],
        "FileName": "/Users/matthewhill/Dev/UnitTests/SonarLintTest.cs",
        "Line": 50,
        "Column": 21,
        "EndLine": 50,
        "EndColumn": 62,
        "Text": "Add at least one assertion to this test case.",
        "Projects": [
          "UnitTests"
        ]
      }
    ]
  },
  "Seq": 2081,
  "Type": "response"
}
 [2024-12-11T11:31:37.915] [sonarlint-analysis-engine] DEBUG sonarlint - Initializing metadata of file file:///Users/matthewhill/Dev/UnitTests/SonarLintTest.cs
 [2024-12-11T11:31:37.916] [Report about progress of OmniSharp analyzer] INFO sonarlint - 1/1 source file has been analyzed
 [2024-12-11T11:31:37.916] [sonarlint-analysis-engine] DEBUG sonarlint - 'JavaScript/TypeScript analysis' skipped because there are no related files in the current project
 [2024-12-11T11:31:37.916] [sonarlint-analysis-engine] DEBUG sonarlint - 'JavaScript inside YAML analysis' skipped because there are no related files in the current project
 [2024-12-11T11:31:37.916] [sonarlint-analysis-engine] DEBUG sonarlint - 'JavaScript inside HTML analysis' skipped because there are no related files in the current project
 [2024-12-11T11:31:37.916] [sonarlint-analysis-engine] DEBUG sonarlint - Execute Sensor: CSS Rules
 [2024-12-11T11:31:37.916] [sonarlint-analysis-engine] INFO sonarlint - No CSS, PHP, HTML or VueJS files are found in the project. CSS analysis is skipped.
 [2024-12-11T11:31:37.916] [sonarlint-analysis-engine] DEBUG sonarlint - Execute Sensor: EnterpriseTextAndSecretsSensor
 [2024-12-11T11:31:37.916] [sonarlint-analysis-engine] INFO sonarlint - Available processors: 12
 [2024-12-11T11:31:37.916] [sonarlint-analysis-engine] INFO sonarlint - Using 12 threads for analysis.
 [2024-12-11T11:31:37.937] [sonarlint-analysis-engine] INFO sonarlint - Analyzing all except non binary files
 [2024-12-11T11:31:37.937] [Progress of the text and secrets analysis] INFO sonarlint - 1 source file to be analyzed
 [2024-12-11T11:31:37.942] [Progress of the text and secrets analysis] INFO sonarlint - 1/1 source file has been analyzed
 [2024-12-11T11:31:37.942] [sonarlint-analysis-engine] INFO sonarlint - Analysis detected 1 issue and 0 Security Hotspots in 595ms
Analysis f7d9d8ee-6ac7-4c13-a2d5-e8894d02decd finished

Hello @matthewhill-fgf,

I was able to reproduce the issue, it was quite tricky, but this is a great starting point to better understand and mitigate it. :tada:

Steps to Reproduce:

  1. Create a new solution and project.
  2. Create a directory called Test.
  3. Create a file named SonarLintTest.cs with the contents as posted above.
  4. Add the NUnit and NSubstitute NuGet dependencies.
  5. Add using NUnit.Framework; to the file.
  6. Important:* Omit using NSubstitute;.

Observations:

  • When the analyzer detects the NSubstitute dependency but does not find the corresponding using directive, it still manages to analyze the file.
  • However, this leads to the S2699 issue.
  • Interestingly, this does not occur with global usings, as long as they are properly detected by the project.

Could you please check if explicitly adding using NSubstitute; in your code resolves the issue? If so, I’d like to gather some additional details about your project to understand why the analyzer might not be recognizing NSubstitute.

  • Are you using global usings for NSubstitute?
  • Does your solution have any unique setup/layout that might affect this?
  • Is your project part of a larger solution, but you’re opening it separately in Rider?

Let me know what you find, and thanks again for your time and understanding! I really appreciate it. :rocket:

Kind regards,
Vasileios

1 Like