Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SLVS-1769 Enable HTML analysis #5957

Merged
merged 4 commits into from
Jan 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build/CopyDependencies/CopyDependencies.targets
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
<SourceJars Include="$(JarDownloadDir)\sonar-csharp-enterprise-plugin-$(EmbeddedSonarAnalyzerVersion).jar" />
<SourceJars Include="$(JarDownloadDir)\sonar-vbnet-enterprise-plugin-$(EmbeddedSonarAnalyzerVersion).jar" />
<SourceJars Include="$(JarDownloadDir)\sonar-javascript-plugin-$(EmbeddedSonarJSAnalyzerVersion).jar" />
<SourceJars Include="$(JarDownloadDir)\sonar-html-plugin-$(EmbeddedSonarHtmlAnalyzerVersion).jar" />
<SourceJars Include="$(JarDownloadDir)\sonar-text-plugin-$(EmbeddedSonarSecretsJarVersion).jar" />
</ItemGroup>
<Copy SourceFiles ="@(SourceJars)" DestinationFolder="$(EmbeddedJarDir)" />
Expand Down
6 changes: 6 additions & 0 deletions build/DownloadDependencies/CommonProperties.props
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@
<JavascriptPluginRemoteUrl>https://repox.jfrog.io/artifactory/sonarsource/org/sonarsource/javascript/sonar-javascript-plugin/$(EmbeddedSonarJSAnalyzerVersion)/$(JavascriptPluginFileName)</JavascriptPluginRemoteUrl>
</PropertyGroup>

<PropertyGroup>
<HtmlPluginFileName>sonar-html-plugin-$(EmbeddedSonarHtmlAnalyzerVersion).jar</HtmlPluginFileName>
<HtmlPluginDownloadPath>$(JarDownloadDir)\$(HtmlPluginFileName)</HtmlPluginDownloadPath>
<HtmlPluginRemoteUrl>https://repox.jfrog.io/artifactory/sonarsource/org/sonarsource/html/sonar-html-plugin/$(EmbeddedSonarHtmlAnalyzerVersion)/$(HtmlPluginFileName)</HtmlPluginRemoteUrl>
</PropertyGroup>

<PropertyGroup>
<SonarTextPluginFileName>sonar-text-plugin-$(EmbeddedSonarSecretsJarVersion).jar</SonarTextPluginFileName>
<SonarTextPluginDownloadPath>$(JarDownloadDir)\$(SonarTextPluginFileName)</SonarTextPluginDownloadPath>
Expand Down
1 change: 1 addition & 0 deletions build/DownloadDependencies/JarProcessing.targets
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@

<Target Name="DownloadRepoxJars">
<Exec Command="curl -u$(ARTIFACTORY_USER):$(ARTIFACTORY_PASSWORD) --ssl-no-revoke -C - --create-dirs --output $(JavaScriptPluginDownloadPath) --url $(JavascriptPluginRemoteUrl)" />
<Exec Command="curl -u$(ARTIFACTORY_USER):$(ARTIFACTORY_PASSWORD) --ssl-no-revoke -C - --create-dirs --output $(HtmlPluginDownloadPath) --url $(HtmlPluginRemoteUrl)" />
<Exec Command="curl -u$(ARTIFACTORY_USER):$(ARTIFACTORY_PASSWORD) --ssl-no-revoke -C - --create-dirs --output $(SonarTextPluginDownloadPath) --url $(SonarTextPluginRemoteUrl)" />
<Exec Command="curl -u$(ARTIFACTORY_USER):$(ARTIFACTORY_PASSWORD) --ssl-no-revoke -C - --create-dirs --output $(EnterpriseSonarCSharpPluginDownloadPath) --url $(EnterpriseSonarCSharpPluginRemoteUrl)" />
<Exec Command="curl -u$(ARTIFACTORY_USER):$(ARTIFACTORY_PASSWORD) --ssl-no-revoke -C - --create-dirs --output $(EnterpriseSonarVBNetPluginDownloadPath) --url $(EnterpriseSonarVBNetPluginRemoteUrl)" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ internal class NonRoslynDummyBindingConfigProvider : IBindingConfigProvider
Language.Js,
Language.Ts,
Language.Secrets,
Language.Css
Language.Css,
Language.Html,
];

public bool IsLanguageSupported(Language language) => SupportedLanguages.Contains(language);
Expand Down
23 changes: 5 additions & 18 deletions src/Core.UnitTests/LanguageTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,6 @@ public void Language_Ctor_ArgChecks()
act = () => new Language(null, key, fileSuffix, serverLanguage);
act.Should().ThrowExactly<ArgumentNullException>().And.ParamName.Should().Be("id");

act = () => new Language(name, key, null, serverLanguage);
act.Should().ThrowExactly<ArgumentNullException>().And.ParamName.Should().Be("fileSuffix");

act = () => new Language(name, key, fileSuffix, null);
act.Should().ThrowExactly<ArgumentNullException>().And.ParamName.Should().Be("serverLanguage");
}
Expand Down Expand Up @@ -80,21 +77,6 @@ public void Language_ISupported_UnsupportedLanguage_IsFalse()
other.IsSupported.Should().BeFalse();
}

[TestMethod]
public void Language_ServerLanguageObjectsAndKeys()
{
// Act + Assert
Language.CSharp.ServerLanguage.Key.Should().Be(SonarLanguageKeys.CSharp);
Language.VBNET.ServerLanguage.Key.Should().Be(SonarLanguageKeys.VBNet);
Language.Cpp.ServerLanguage.Key.Should().Be(SonarLanguageKeys.CPlusPlus);
Language.C.ServerLanguage.Key.Should().Be(SonarLanguageKeys.C);
Language.Js.ServerLanguage.Key.Should().Be(SonarLanguageKeys.JavaScript);
Language.Ts.ServerLanguage.Key.Should().Be(SonarLanguageKeys.TypeScript);
Language.Css.ServerLanguage.Key.Should().Be(SonarLanguageKeys.Css);
Language.Secrets.ServerLanguage.Key.Should().Be(SonarLanguageKeys.Secrets);
Language.Unknown.ServerLanguage.Should().BeNull();
}

[TestMethod]
public void Language_Equality()
{
Expand All @@ -118,6 +100,7 @@ public void GetLanguageFromLanguageKey_GetsCorrectLanguage()
var js = Language.GetLanguageFromLanguageKey("js");
var ts = Language.GetLanguageFromLanguageKey("ts");
var css = Language.GetLanguageFromLanguageKey("css");
var html = Language.GetLanguageFromLanguageKey("Web");
var unknown = Language.GetLanguageFromLanguageKey("unknown");

cs.Should().Be(Language.CSharp);
Expand All @@ -127,6 +110,7 @@ public void GetLanguageFromLanguageKey_GetsCorrectLanguage()
js.Should().Be(Language.Js);
ts.Should().Be(Language.Ts);
css.Should().Be(Language.Css);
html.Should().Be(Language.Html);
unknown.Should().Be(null);
}

Expand All @@ -140,6 +124,7 @@ public void GetLanguageFromRepositoryKey_GetsCorrectLanguage()
var js = Language.GetLanguageFromRepositoryKey("javascript");
var ts = Language.GetLanguageFromRepositoryKey("typescript");
var css = Language.GetLanguageFromRepositoryKey("css");
var html = Language.GetLanguageFromRepositoryKey("Web");
var secrets = Language.GetLanguageFromRepositoryKey("secrets");
var unknown = Language.GetLanguageFromRepositoryKey("unknown");

Expand All @@ -154,6 +139,7 @@ public void GetLanguageFromRepositoryKey_GetsCorrectLanguage()
js.Should().Be(Language.Js);
ts.Should().Be(Language.Ts);
css.Should().Be(Language.Css);
html.Should().Be(Language.Html);
secrets.Should().Be(Language.Secrets);
unknown.Should().Be(null);

Expand All @@ -172,6 +158,7 @@ public void GetSonarRepoKeyFromLanguageKey_GetsCorrectRepoKey()
Language.GetSonarRepoKeyFromLanguage(Language.Js).Should().Be("javascript");
Language.GetSonarRepoKeyFromLanguage(Language.Ts).Should().Be("typescript");
Language.GetSonarRepoKeyFromLanguage(Language.Css).Should().Be("css");
Language.GetSonarRepoKeyFromLanguage(Language.Html).Should().Be("Web");

Language.GetSonarRepoKeyFromLanguage(Language.Unknown).Should().BeNull();

Expand Down
21 changes: 9 additions & 12 deletions src/Core/Language.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,13 @@ public sealed class Language : IEquatable<Language>
public readonly static Language Unknown = new Language();
public readonly static Language CSharp = new Language("CSharp", CoreStrings.CSharpLanguageName, "sonarlint_csharp.globalconfig", SonarQubeLanguage.CSharp);
public readonly static Language VBNET = new Language("VB", CoreStrings.VBNetLanguageName, "sonarlint_vb.globalconfig", SonarQubeLanguage.VbNet);
public readonly static Language Cpp = new Language("C++", CoreStrings.CppLanguageName, "cpp_settings.json", SonarQubeLanguage.Cpp);
public readonly static Language C = new Language("C", "C", "c_settings.json", SonarQubeLanguage.C);
public readonly static Language Js = new Language("Js", "JavaScript", "js_settings.json", SonarQubeLanguage.Js);
public readonly static Language Ts = new Language("Ts", "TypeScript", "ts_settings.json", SonarQubeLanguage.Ts);
public readonly static Language Css = new Language("Css", "CSS", "css_settings.json", SonarQubeLanguage.Css);
public readonly static Language Secrets = new Language("Secrets", "Secrets", "secrets_settings.json", SonarQubeLanguage.Secrets);
public readonly static Language Cpp = new Language("C++", CoreStrings.CppLanguageName, null, SonarQubeLanguage.Cpp);
public readonly static Language C = new Language("C", "C", null, SonarQubeLanguage.C);
public readonly static Language Js = new Language("Js", "JavaScript", null, SonarQubeLanguage.Js);
public readonly static Language Ts = new Language("Ts", "TypeScript", null, SonarQubeLanguage.Ts);
public readonly static Language Css = new Language("Css", "CSS", null, SonarQubeLanguage.Css);
public readonly static Language Html = new Language("Html", "HTML", null, SonarQubeLanguage.Html);
public readonly static Language Secrets = new Language("Secrets", "Secrets", null, SonarQubeLanguage.Secrets);

/// <summary>
/// Returns the language for the specified language key, or null if it does not match a known language
Expand Down Expand Up @@ -117,7 +118,7 @@ public static IEnumerable<Language> KnownLanguages
{
get
{
return new[] { CSharp, VBNET, Cpp, C, Js, Ts, Css, Secrets };
return new[] { CSharp, VBNET, Cpp, C, Js, Ts, Css, Html, Secrets };
}
}

Expand All @@ -136,6 +137,7 @@ public static IEnumerable<Language> KnownLanguages
{ "typescript", Ts },
{ "tssecurity", Ts },
{ "css", Css },
{ "Web", Html},
{ "secrets", Secrets}
};

Expand All @@ -161,11 +163,6 @@ public Language(string id, string name, string fileSuffix, SonarQubeLanguage ser
throw new ArgumentNullException(nameof(name));
}

if (string.IsNullOrWhiteSpace(fileSuffix))
{
throw new ArgumentNullException(nameof(fileSuffix));
}

this.Id = id;
this.Name = name;
this.FileSuffixAndExtension = fileSuffix;
Expand Down
28 changes: 0 additions & 28 deletions src/Core/SonarArtefactKeys.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,34 +36,6 @@ namespace SonarLint.VisualStudio.Core
//
// * rule definition: part of a single repository. The full rule id is given by "[repo id]:[rule id]"

/// <summary>
/// Language keys for languages supported by SonarQube/Cloud plugins
/// </summary>
/// <remarks>A full list of languages keys can be obtained by calling https://sonarcloud.io/api/languages/list
/// </remarks>
public static class SonarLanguageKeys
{
// TODO: the SonarQube.Client assembly has a class that defines the SonarQube language keys:
// see SonarQube.Client.Models.SonarQubeLanguage. We shouldn't need both definitions.
public const string CSharp = "cs";
public const string VBNet = "vbnet";
public const string JavaScript = "js";
public const string TypeScript = "ts";
public const string Css = "css";
public const string C = "c";
public const string CPlusPlus = "cpp";
public const string Secrets = "secrets";
}

public static class SonarPluginKeys
{
public const string SonarCSharp = "csharp";
public const string SonarVBNet = "vbnet";
public const string SonarCFamily = "cpp";
public const string SonarJs = "javascript";
public const string SonarSecrets = "text";
}

public static class SonarRuleRepoKeys
{
public const string JavaScript = "javascript";
Expand Down
2 changes: 0 additions & 2 deletions src/Core/Telemetry/ITelemetryManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@ public interface ITelemetryManager

void OptIn();

void LanguageAnalyzed(string languageKey, TimeSpan analysisTime);

void TaintIssueInvestigatedLocally();

void TaintIssueInvestigatedRemotely();
Expand Down
1 change: 1 addition & 0 deletions src/EmbeddedSonarAnalyzer.props
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<EmbeddedSonarAnalyzerVersion>10.4.0.108396</EmbeddedSonarAnalyzerVersion>
<EmbeddedSonarCFamilyAnalyzerVersion>6.62.0.78645</EmbeddedSonarCFamilyAnalyzerVersion>
<EmbeddedSonarJSAnalyzerVersion>10.20.0.29356</EmbeddedSonarJSAnalyzerVersion>
<EmbeddedSonarHtmlAnalyzerVersion>3.18.0.5605</EmbeddedSonarHtmlAnalyzerVersion>
<EmbeddedSonarSecretsJarVersion>2.20.0.5038</EmbeddedSonarSecretsJarVersion>
<!-- SLOOP: Binaries for SonarLint Out Of Process -->
<EmbeddedSloopVersion>10.13.0.79996</EmbeddedSloopVersion>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ public void StandaloneLanguages_ShouldBeExpected()
Language.JS,
Language.TS,
Language.CSS,
Language.HTML,
Language.C,
Language.CPP,
Language.CS,
Expand All @@ -149,6 +150,7 @@ public void AnalyzableLanguages_ShouldBeExpected()
Language.JS,
Language.TS,
Language.CSS,
Language.HTML,
Language.C,
Language.CPP,
Language.SECRETS
Expand Down
20 changes: 0 additions & 20 deletions src/Integration.UnitTests/Telemetry/TelemetryManagerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -135,26 +135,6 @@ public void QuickFixApplied_CallsRpcService()
});
}

[DataTestMethod]
[DataRow(SonarLanguageKeys.C, Language.C, 1)]
[DataRow(SonarLanguageKeys.CPlusPlus, Language.CPP, 2)]
[DataRow(SonarLanguageKeys.CSharp, Language.CS, 3)]
[DataRow(SonarLanguageKeys.VBNet, Language.VBNET, 4)]
[DataRow(SonarLanguageKeys.JavaScript, Language.JS, 5)]
[DataRow(SonarLanguageKeys.TypeScript, Language.TS, 6)]
[DataRow(SonarLanguageKeys.Css, Language.CSS, 7)]
[DataRow(SonarLanguageKeys.Secrets, Language.SECRETS, 8)]
public void LanguageAnalyzed_CallsRpcService(string languageKey, Language language, int analysisTimeMs)
{
telemetryManager.LanguageAnalyzed(languageKey, TimeSpan.FromMilliseconds(analysisTimeMs));

Received.InOrder(() =>
{
telemetryHandler.Notify(Arg.Any<Action<ITelemetrySLCoreService>>());
telemetryService.AnalysisDoneOnSingleLanguage(Arg.Is<AnalysisDoneOnSingleLanguageParams>(a => a.language == language && a.analysisTimeMs == analysisTimeMs));
});
}

[DataTestMethod]
[DataRow(true)]
[DataRow(false)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ public void CommandRegistration()
[DataRow("javascript:S333")]
[DataRow("typescript:S444")]
[DataRow("css:S777")]
[DataRow("Web:S787")]
[DataRow("secrets:S555")]
public void CheckStatusAndExecute_SingleIssue_SupportedRepo_StandaloneMode_VisibleAndEnabled(string errorCode)
{
Expand Down Expand Up @@ -119,6 +120,8 @@ public void CheckStatusAndExecute_SingleIssue_SupportedRepo_StandaloneMode_Visib
[DataRow("typescript:S111", SonarLintMode.LegacyConnected, false)]
[DataRow("css:S111", SonarLintMode.Connected, false)]
[DataRow("css:S111", SonarLintMode.LegacyConnected, false)]
[DataRow("Web:S111", SonarLintMode.Connected, false)]
[DataRow("Web:S111", SonarLintMode.LegacyConnected, false)]
public void CheckStatus_SingleIssue_SupportedRepo_ConnectedMode_HasExpectedEnabledStatus(string errorCode, SonarLintMode bindingMode,
bool expectedEnabled)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ public void QueryStatus_NotInConnectedMode_VisibleButDisabled()
[DataRow("javascript:S333")]
[DataRow("typescript:S444")]
[DataRow("css:S555")]
[DataRow("Web:S545")]
[DataRow("csharpsquid:S555")]
[DataRow("vbnet:S555")]
public void QueryStatus_ConnectedModeAndSupportedIssue_VisibleAndEnabled(string errorCode)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,18 +104,21 @@ public void ListConnectedModeEmbeddedPluginPathsByKey_JarsExists_ContainsEntryFo
MockFileSystem(true,
BuildJarFullPath("sonar-text-plugin-2.15.0.3845.jar"),
BuildJarFullPath("sonar-javascript-plugin-10.14.0.26080.jar"),
BuildJarFullPath("sonar-html-plugin-3.18.0.5605.jar"),
BuildJarFullPath("sonar-cfamily-plugin-6.58.0.74356.jar"));

var result = testSubject.ListConnectedModeEmbeddedPluginPathsByKey();

result.Count.Should().Be(2);
result.Count.Should().Be(3);
VerifyContainsPlugin(result, "text", "sonar-text-plugin-2.15.0.3845.jar");
VerifyContainsPlugin(result, "web", "sonar-html-plugin-3.18.0.5605.jar");
VerifyContainsPlugin(result, "javascript", "sonar-javascript-plugin-10.14.0.26080.jar");
}

[TestMethod]
[DataRow("text", "sonar-text-plugin-2.15.0.3845.jar", "sonar-text-plugin-2.16.0.4008.jar")]
[DataRow("javascript", "sonar-javascript-plugin-10.14.0.26080.jar", "sonar-javascript-plugin-10.15.0.0080.jar")]
[DataRow("web", "sonar-html-plugin-10.14.0.26080.jar", "sonar-html-plugin-10.15.0.0080.jar")]
public void ListConnectedModeEmbeddedPluginPathsByKey_MultiplePluginVersionsExist_ReturnsTheFirstOneAndLogs(string pluginKey, string version1, string version2)
{
MockFileSystem(true, BuildJarFullPath(version1), BuildJarFullPath(version2));
Expand All @@ -129,6 +132,7 @@ public void ListConnectedModeEmbeddedPluginPathsByKey_MultiplePluginVersionsExis
[TestMethod]
[DataRow("text", "sonar-text-plugin-2.15.0.3845.jar", "sonar-text-plugin-enterprise-2.15.0.3845.jar")]
[DataRow("javascript", "sonar-javascript-plugin-10.14.0.26080.jar", "sonar-javascript-plugin-enterprise-10.14.0.26080.jar")]
[DataRow("web", "sonar-html-plugin-10.14.0.26080.jar", "sonar-html-plugin-enterprise-10.14.0.26080.jar")]
public void ListConnectedModeEmbeddedPluginPathsByKey_PluginsWithDifferentNameExists_ReturnsCorrectOne(string pluginKey, string correct, string wrong)
{
MockFileSystem(true, BuildJarFullPath(wrong), BuildJarFullPath(correct));
Expand All @@ -146,7 +150,7 @@ public void ListConnectedModeEmbeddedPluginPathsByKey_NoJars_ReturnsEmptyDiction
var result = testSubject.ListConnectedModeEmbeddedPluginPathsByKey();

result.Should().BeEmpty();
logger.Received(2).LogVerbose(Strings.ConnectedModeEmbeddedPluginJarLocator_JarsNotFound);
logger.Received(3).LogVerbose(Strings.ConnectedModeEmbeddedPluginJarLocator_JarsNotFound);
}

private void MockFileSystem(bool directoryExists, params string[] files)
Expand Down
1 change: 1 addition & 0 deletions src/Integration.Vsix/Analysis/DisableRuleCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ private void Execute(object sender, EventArgs e)
SonarRuleRepoKeys.JavaScript,
SonarRuleRepoKeys.TypeScript,
SonarRuleRepoKeys.Css,
SonarRuleRepoKeys.HtmlRules,
SonarRuleRepoKeys.Secrets,
};

Expand Down
2 changes: 2 additions & 0 deletions src/Integration.Vsix/Analysis/MuteIssueCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
using SonarLint.VisualStudio.Core.Suppressions;
using SonarLint.VisualStudio.Core.Transition;
using SonarLint.VisualStudio.Infrastructure.VS;
using SonarQube.Client.Models;
using MessageBox = SonarLint.VisualStudio.Core.MessageBox;
using Task = System.Threading.Tasks.Task;

Expand Down Expand Up @@ -193,6 +194,7 @@ private async Task<bool> MuteIssueAsync(IFilterableIssue issue)
SonarRuleRepoKeys.JavaScript,
SonarRuleRepoKeys.TypeScript,
SonarRuleRepoKeys.Css,
SonarRuleRepoKeys.HtmlRules,
SonarRuleRepoKeys.CSharpRules,
SonarRuleRepoKeys.VBNetRules
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ public class SLCoreEmbeddedPluginJarLocator : ISLCoreEmbeddedPluginJarLocator
private readonly Dictionary<string, string> connectedModePluginNamePatternByPluginKey = new()
{
{ "text", "sonar-text-plugin-(\\d+\\.\\d+\\.\\d+\\.\\d+)\\.jar" },
{ "javascript", "sonar-javascript-plugin-(\\d+\\.\\d+\\.\\d+\\.\\d+)\\.jar" }
{ "javascript", "sonar-javascript-plugin-(\\d+\\.\\d+\\.\\d+\\.\\d+)\\.jar" },
{ "web", "sonar-html-plugin-(\\d+\\.\\d+\\.\\d+\\.\\d+)\\.jar"}
};
private readonly IVsixRootLocator vsixRootLocator;
private readonly IFileSystem fileSystem;
Expand Down
2 changes: 2 additions & 0 deletions src/Integration/SLCore/SLCoreConstantsProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public SLCoreConstantsProvider(IVsInfoProvider vsInfoProvider)
[
Language.JS,
Language.TS,
Language.HTML,
Language.CSS,
Language.C,
Language.CPP,
Expand All @@ -65,6 +66,7 @@ public SLCoreConstantsProvider(IVsInfoProvider vsInfoProvider)
[
Language.JS,
Language.TS,
Language.HTML,
Language.CSS,
Language.C,
Language.CPP,
Expand Down
Loading
Loading