Skip to content

Commit

Permalink
added diagnostics settings
Browse files Browse the repository at this point in the history
  • Loading branch information
retailcoder committed Mar 29, 2024
1 parent fe7958b commit 9edeb2d
Show file tree
Hide file tree
Showing 11 changed files with 137 additions and 34 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using Rubberduck.InternalApi.Settings.Model;
using Rubberduck.InternalApi.Settings.Model.Editor.CodeFolding;
using Rubberduck.InternalApi.Settings.Model.Editor.Tools;
using Rubberduck.InternalApi.Settings.Model.LanguageServer.Diagnostics;
using Rubberduck.InternalApi.Settings.Model.Logging;
using Rubberduck.InternalApi.Settings.Model.ServerStartup;
using Rubberduck.InternalApi.Settings.Model.TelemetryServer;
Expand Down Expand Up @@ -31,6 +32,7 @@ public SettingViewModelFactory(UIServiceHelper service)
public ISettingViewModel CreateViewModel(UriRubberduckSetting setting) => new UriSettingViewModel(setting);

public ISettingViewModel CreateViewModel(LogLevelSetting setting) => new LogLevelSettingViewModel(setting);
public ISettingViewModel CreateViewModel(DiagnosticSeveritySetting setting) => new DiagnosticSeveritySettingViewModel(setting);
public ISettingViewModel CreateViewModel(DefaultToolWindowLocationSetting setting) => new DefaultToolWindowLocationSettingViewModel(setting);

public ISettingViewModel CreateViewModel(TraceLevelSetting setting) => new MessageTraceLevelSettingViewModel(setting);
Expand Down Expand Up @@ -88,6 +90,8 @@ private ISettingViewModel GetChildItem<TSetting>(TSetting setting) where TSettin
return CreateViewModel(uriSetting);
case LogLevelSetting loglevelSetting:
return CreateViewModel(loglevelSetting);
case DiagnosticSeveritySetting severitySetting:
return CreateViewModel(severitySetting);
case DefaultToolWindowLocationSetting toolwindowLocationSetting:
return CreateViewModel(toolwindowLocationSetting);
case TraceLevelSetting tracelevelSetting:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
using Rubberduck.InternalApi.Settings.Model;
using Rubberduck.UI.Shared.Settings.Abstract;

namespace Rubberduck.UI.Shared.Settings
{
public class DiagnosticSeveritySettingViewModel : EnumValueSettingViewModel<DiagnosticSeverity>
{
public DiagnosticSeveritySettingViewModel(TypedRubberduckSetting<DiagnosticSeverity> setting) : base(setting)
{
}
}
}
13 changes: 11 additions & 2 deletions Shared/Rubberduck.InternalApi/Model/RubberduckDiagnostic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ namespace Rubberduck.InternalApi.Model;
public enum RubberduckDiagnosticId
{
// TODO sort and categorize, then carve in stone.
/*
* [00]: Tokenization & parsing pass
* [000]: IParseTree traversals
* [0000]: Symbol traversals
* [00000]: Execution pass
*/

InvalidAnnotation = 20,

Expand Down Expand Up @@ -52,8 +58,11 @@ public enum RubberduckDiagnosticId
ImplementationsShouldBePrivate,
PublicDeclarationInWorksheetModule, // [RD2:PublicEnumerationDeclaredInWorksheetInspection]

// execution pass diagnostics
UnintendedConstantExpression = 1001,
// symbol traversals [0000]
UseMeaningfulIdentifierNames = 1001,

// execution pass diagnostics [00000]
UnintendedConstantExpression = 11001,
SuspiciousValueAssignment,
TypeCastConversion,
BitwiseOperator,
Expand Down
4 changes: 0 additions & 4 deletions Shared/Rubberduck.InternalApi/Rubberduck.InternalApi.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,5 @@
</PackageReference>
<PackageReference Include="System.Management" Version="7.0.2" />
</ItemGroup>

<ItemGroup>
<Folder Include="Settings\Model\LanguageServer\Diagnostics\" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ public record class ToolWindowSettings : TypedSettingGroup
new DefaultToolWindowLocationSetting(),
};

public ToolWindowSettings() { }
public ToolWindowSettings()
{
Value = DefaultValue = DefaultSettings;
}

public ToolWindowSettings(IDictionary<string, RubberduckSetting> settings) : this()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace Rubberduck.InternalApi.Settings.Model.LanguageClient;
/// </summary>
public record class DisabledMessageKeysSetting : TypedRubberduckSetting<string[]>
{
public static string[] DefaultSettingValue { get; } = Array.Empty<string>();
public static string[] DefaultSettingValue { get; } = [];

public static void DisableMessageKey(string key, RubberduckSettingsProvider provider)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
using Rubberduck.InternalApi.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json.Serialization;

namespace Rubberduck.InternalApi.Settings.Model.LanguageServer.Diagnostics;

public record class DiagnosticsSettings : TypedSettingGroup //<RubberduckDiagnosticId>
{
public static DiagnosticSetting[] DefaultSettings =>
Enum.GetValues<RubberduckDiagnosticId>().Except(Overrides.Keys)
.Select(e => new DiagnosticSetting { Key = e.Code()})
.Concat(Overrides.Values)
.ToArray();

public DiagnosticsSettings()
{
DefaultValue = DefaultSettings;
}

private static Dictionary<RubberduckDiagnosticId, DiagnosticSetting> Overrides { get; } = new()
{
[RubberduckDiagnosticId.UseMeaningfulIdentifierNames] = UseMeaningfulNamesDiagnosticSettings.Default,
};

public static DiagnosticsSettings Default { get; } = new DiagnosticsSettings() { Value = DefaultSettings, DefaultValue = DefaultSettings };
}

/// <summary>
/// The base class for configuring an individual diagnostic.
/// </summary>
public record class DiagnosticSetting : TypedSettingGroup
{
private static readonly RubberduckSetting[] DefaultSettings =
[
new DiagnosticSeveritySetting(),
];

public DiagnosticSetting()
{
Value = DefaultValue = DefaultSettings;
}

[JsonIgnore]
public DiagnosticSeverity Severity => GetSetting<DiagnosticSeveritySetting>()?.TypedValue ?? DiagnosticSeveritySetting.DefaultSettingValue;
}

public record class DiagnosticSeveritySetting : TypedRubberduckSetting<DiagnosticSeverity>
{
public static DiagnosticSeverity DefaultSettingValue { get; } = DiagnosticSeverity.Warning;
public DiagnosticSeveritySetting()
{
SettingDataType = SettingDataType.EnumValueSetting;
Value = DefaultValue = DefaultSettingValue;
}
}

public record class UseMeaningfulNamesDiagnosticSettings : DiagnosticSetting
{
private static readonly RubberduckSetting[] DefaultSettings =
[
new DiagnosticSeveritySetting(),
new IgnoredIdentifierPrefixesSetting(),
];

public UseMeaningfulNamesDiagnosticSettings()
{
Value = DefaultValue = DefaultSettings;
}

[JsonIgnore]
public string[] IgnoredIdentifierPrefixes => GetSetting<IgnoredIdentifierPrefixesSetting>()?.TypedValue ?? IgnoredIdentifierPrefixesSetting.DefaultSettingValue;

public static UseMeaningfulNamesDiagnosticSettings Default { get; } = new UseMeaningfulNamesDiagnosticSettings() { Value = DefaultSettings, DefaultValue = DefaultSettings };
}

public record class IgnoredIdentifierPrefixesSetting : TypedRubberduckSetting<string[]>
{
public static string[] DefaultSettingValue { get; } = [];

public IgnoredIdentifierPrefixesSetting()
{
SettingDataType = SettingDataType.ListSetting;
Value = DefaultValue = DefaultSettingValue;
}
}
Original file line number Diff line number Diff line change
@@ -1,38 +1,20 @@
using Rubberduck.InternalApi.Settings;
using Rubberduck.InternalApi.Settings.Model.LanguageServer.Diagnostics;
using Rubberduck.InternalApi.Settings.Model.ServerStartup;
using System.Text.Json.Serialization;

namespace Rubberduck.InternalApi.Settings.Model.LanguageServer;

public record class DiagnosticsSettings : TypedSettingGroup, IDefaultSettingsProvider<DiagnosticsSettings>
{
private static readonly RubberduckSetting[] DefaultSettings =
[

];

public DiagnosticsSettings()
{
DefaultValue = DefaultSettings;
}



public static DiagnosticsSettings Default { get; } = new() { Value = DefaultSettings, DefaultValue = DefaultSettings };
DiagnosticsSettings IDefaultSettingsProvider<DiagnosticsSettings>.Default => Default;
}

/// <summary>
/// Configures LSP (Language Server Protocol) server options.
/// </summary>
public record class LanguageServerSettings : TypedSettingGroup, IDefaultSettingsProvider<LanguageServerSettings>
{
private static readonly RubberduckSetting[] DefaultSettings =
new RubberduckSetting[]
{
new TraceLevelSetting{ Value = TraceLevelSetting.DefaultSettingValue },
[
new TraceLevelSetting { Value = TraceLevelSetting.DefaultSettingValue },
new LanguageServerStartupSettings { Value = LanguageServerStartupSettings.DefaultSettings },
};
new DiagnosticsSettings { Value = DiagnosticsSettings.DefaultSettings },
];

public LanguageServerSettings()
{
Expand All @@ -43,6 +25,8 @@ public LanguageServerSettings()
public MessageTraceLevel TraceLevel => GetSetting<TraceLevelSetting>()?.TypedValue ?? TraceLevelSetting.DefaultSettingValue;
[JsonIgnore]
public LanguageServerStartupSettings StartupSettings => GetSetting<LanguageServerStartupSettings>() ?? LanguageServerStartupSettings.Default;
[JsonIgnore]
public DiagnosticsSettings Diagnostics => GetSetting<DiagnosticsSettings>() ?? DiagnosticsSettings.Default;

public static LanguageServerSettings Default { get; } = new() { Value = DefaultSettings, DefaultValue = DefaultSettings };
LanguageServerSettings IDefaultSettingsProvider<LanguageServerSettings>.Default => Default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Rubberduck.InternalApi.Settings.Model.General;
using Rubberduck.InternalApi.Settings.Model.LanguageClient;
using Rubberduck.InternalApi.Settings.Model.LanguageServer;
using Rubberduck.InternalApi.Settings.Model.LanguageServer.Diagnostics;
using Rubberduck.InternalApi.Settings.Model.Logging;
using Rubberduck.InternalApi.Settings.Model.ServerStartup;
using Rubberduck.InternalApi.Settings.Model.TelemetryServer;
Expand Down Expand Up @@ -33,6 +34,11 @@ namespace Rubberduck.InternalApi.Settings.Model;
[JsonDerivedType(typeof(RequireAddInHostSetting), nameof(RequireAddInHostSetting))]
[JsonDerivedType(typeof(RequireSavedHostSetting), nameof(RequireSavedHostSetting))]

[JsonDerivedType(typeof(DiagnosticsSettings), nameof(DiagnosticsSettings))] // ~ diagnostics
[JsonDerivedType(typeof(DiagnosticSetting), nameof(DiagnosticSetting))]
[JsonDerivedType(typeof(UseMeaningfulNamesDiagnosticSettings), nameof(UseMeaningfulNamesDiagnosticSettings))]
[JsonDerivedType(typeof(IgnoredIdentifierPrefixesSetting), nameof(IgnoredIdentifierPrefixesSetting))]

[JsonDerivedType(typeof(WorkspaceSettings), nameof(WorkspaceSettings))] // ~ workspace settings (language client)
[JsonDerivedType(typeof(DefaultWorkspaceRootSetting), nameof(DefaultWorkspaceRootSetting))]
[JsonDerivedType(typeof(RequireDefaultWorkspaceRootHostSetting), nameof(RequireDefaultWorkspaceRootHostSetting))]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using Microsoft.Extensions.Logging;
using Rubberduck.InternalApi.ServerPlatform.TelemetryServer;
using Rubberduck.InternalApi.Settings;
using Rubberduck.InternalApi.Settings.Model.ServerStartup;
using System;
using System.Linq;
Expand Down Expand Up @@ -139,4 +138,4 @@ public record class TelemetrySetting : BooleanRubberduckSetting
public TelemetrySetting()
{
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using Rubberduck.InternalApi.Settings.Model.LanguageServer.Diagnostics;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
Expand Down

0 comments on commit 9edeb2d

Please sign in to comment.