diff --git a/build/props/AvaloniaEdit.TextMate.props b/build/props/AvaloniaEdit.TextMate.props
index 3ff10f0d..f2e18e6d 100644
--- a/build/props/AvaloniaEdit.TextMate.props
+++ b/build/props/AvaloniaEdit.TextMate.props
@@ -1,6 +1,6 @@
-
+
diff --git a/build/props/AvaloniaEdit.props b/build/props/AvaloniaEdit.props
index 0ea4a719..8c206208 100644
--- a/build/props/AvaloniaEdit.props
+++ b/build/props/AvaloniaEdit.props
@@ -1,6 +1,6 @@
-
+
diff --git a/src/OneWare.Core/Styles/Editor.axaml b/src/OneWare.Core/Styles/Editor.axaml
index d4af0436..d006951d 100644
--- a/src/OneWare.Core/Styles/Editor.axaml
+++ b/src/OneWare.Core/Styles/Editor.axaml
@@ -47,7 +47,7 @@
Width="{Binding #CompletionName.Bounds.Height}"
Height="{Binding #CompletionName.Bounds.Height}" />
0)
+ {
+ var compare = string.Compare(Completion.CompletionList.CompletionData[c].Label, customItem.Label,
+ StringComparison.Ordinal);
+
+ if (compare > 0)
{
Completion.CompletionList.CompletionData.Insert(c, customItem);
insert = true;
break;
}
-
+ if (compare == 0)
+ {
+ //Do not insert duplicates
+ insert = true;
+ break;
+ }
+ }
+
if (!insert) Completion.CompletionList.CompletionData.Add(customItem);
}
@@ -565,7 +575,7 @@ protected virtual async Task ShowCompletionAsync(CompletionTriggerKind triggerKi
var length = 0;
foreach (var data in Completion.CompletionList.CompletionData)
{
- var contentLength = (data.Content as string)?.Length ?? 0;
+ var contentLength = data.Label.Length;
var detailLength = (data as CompletionData)?.Detail?.Length ?? 0;
var visibleChars = contentLength + detailLength + 5;
diff --git a/src/OneWare.Verilog/LanguageServiceVerilog.cs b/src/OneWare.Verilog/LanguageServiceVerilog.cs
index 33e18761..ab7de2ba 100644
--- a/src/OneWare.Verilog/LanguageServiceVerilog.cs
+++ b/src/OneWare.Verilog/LanguageServiceVerilog.cs
@@ -15,7 +15,7 @@ public class LanguageServiceVerilog(string workspace, ISettingsService settingsS
{
public override ITypeAssistance GetTypeAssistance(IEditor editor)
{
- return new TypeAssistanceVerilog(editor, this);
+ return new TypeAssistanceVerilog(editor, this, settingsService);
}
protected override IEnumerable ConvertErrors(PublishDiagnosticsParams pdp, IFile file)
diff --git a/src/OneWare.Verilog/TypeAssistanceVerilog.cs b/src/OneWare.Verilog/TypeAssistanceVerilog.cs
index c343630c..a19e3a3b 100644
--- a/src/OneWare.Verilog/TypeAssistanceVerilog.cs
+++ b/src/OneWare.Verilog/TypeAssistanceVerilog.cs
@@ -3,6 +3,7 @@
using OneWare.Essentials.EditorExtensions;
using OneWare.Essentials.Helpers;
using OneWare.Essentials.LanguageService;
+using OneWare.Essentials.Services;
using OneWare.Essentials.ViewModels;
using OneWare.Verilog.Folding;
@@ -10,10 +11,13 @@ namespace OneWare.Verilog;
internal class TypeAssistanceVerilog : TypeAssistanceLanguageService
{
+ private readonly ISettingsService _settingsService;
private static List? _snippets;
- public TypeAssistanceVerilog(IEditor editor, LanguageServiceVerilog ls) : base(editor, ls)
+ public TypeAssistanceVerilog(IEditor editor, LanguageServiceVerilog ls, ISettingsService settingsService) : base(editor, ls)
{
+ _settingsService = settingsService;
+
CodeBox.TextArea.IndentationStrategy =
IndentationStrategy = new LspIndentationStrategy(CodeBox.Options, ls, CurrentFile);
FoldingStrategy = new RegexFoldingStrategy(FoldingRegexVerilog.FoldingStart, FoldingRegexVerilog.FoldingEnd);
@@ -29,10 +33,12 @@ protected override Task> GetCustomCompletionItemsAsync()
if (IsInComment(CodeBox.CaretOffset)) return Task.FromResult(items);
- if (_snippets != null)
+ if (_settingsService.GetSettingValue(VerilogModule.EnableSnippetsSetting) && _snippets != null)
+ {
items.AddRange(_snippets.Select(snippet => new CompletionData(snippet.Content, snippet.Label, null,
snippet.Description, TypeAssistanceIconStore.Instance.Icons[CompletionItemKind.Snippet], 0,
CodeBox.CaretOffset)));
+ }
return Task.FromResult(items);
}
diff --git a/src/OneWare.Verilog/VerilogModule.cs b/src/OneWare.Verilog/VerilogModule.cs
index 543805a5..1496ad63 100644
--- a/src/OneWare.Verilog/VerilogModule.cs
+++ b/src/OneWare.Verilog/VerilogModule.cs
@@ -13,6 +13,7 @@ public class VerilogModule : IModule
{
public const string LspName = "Verible";
public const string LspPathSetting = "VerilogModule_VeriblePath";
+ public const string EnableSnippetsSetting = "VerilogModule_EnableSnippets";
public static readonly Package VeriblePackage = new()
{
@@ -157,6 +158,9 @@ public void OnInitialized(IContainerProvider containerProvider)
containerProvider.Resolve().RegisterTitledFilePath("Languages", "Verilog", LspPathSetting,
"Verible Path", "Path for Verible executable", "",
null, containerProvider.Resolve().PackagesDirectory, File.Exists, PlatformHelper.ExeFile);
+
+ containerProvider.Resolve().RegisterTitled("Languages", "Verilog", EnableSnippetsSetting,
+ "Enable Snippets", "Enable snippets that provide rich completion. These are not smart or context based.", true);
containerProvider.Resolve().RegisterErrorSource(LspName);
containerProvider.Resolve().RegisterTextMateLanguage("verilog",
diff --git a/src/OneWare.Vhdl/LanguageServiceVhdl.cs b/src/OneWare.Vhdl/LanguageServiceVhdl.cs
index 553ccffe..c90e8f0c 100644
--- a/src/OneWare.Vhdl/LanguageServiceVhdl.cs
+++ b/src/OneWare.Vhdl/LanguageServiceVhdl.cs
@@ -15,7 +15,7 @@ public class LanguageServiceVhdl(string workspace, ISettingsService settingsServ
{
public override ITypeAssistance GetTypeAssistance(IEditor editor)
{
- return new TypeAssistanceVhdl(editor, this);
+ return new TypeAssistanceVhdl(editor, this, settingsService);
}
protected override IEnumerable ConvertErrors(PublishDiagnosticsParams pdp, IFile file)
diff --git a/src/OneWare.Vhdl/TypeAssistanceVhdl.cs b/src/OneWare.Vhdl/TypeAssistanceVhdl.cs
index 088f9ee0..4b13f025 100644
--- a/src/OneWare.Vhdl/TypeAssistanceVhdl.cs
+++ b/src/OneWare.Vhdl/TypeAssistanceVhdl.cs
@@ -3,7 +3,9 @@
using OneWare.Essentials.EditorExtensions;
using OneWare.Essentials.Helpers;
using OneWare.Essentials.LanguageService;
+using OneWare.Essentials.Services;
using OneWare.Essentials.ViewModels;
+using OneWare.Settings;
using OneWare.Vhdl.Folding;
using OneWare.Vhdl.Formatting;
using OneWare.Vhdl.Indentation;
@@ -14,7 +16,10 @@ internal class TypeAssistanceVhdl : TypeAssistanceLanguageService
{
private static List? _snippets;
- public TypeAssistanceVhdl(IEditor editor, LanguageServiceVhdl ls) : base(editor, ls)
+ private readonly ISettingsService _settingsService;
+
+ public TypeAssistanceVhdl(IEditor editor, LanguageServiceVhdl ls, ISettingsService settingsService) : base(editor,
+ ls)
{
CodeBox.TextArea.IndentationStrategy = IndentationStrategy = new VhdlIndentationStrategy(CodeBox.Options);
FormattingStrategy = new VhdlFormatter();
@@ -22,6 +27,8 @@ public TypeAssistanceVhdl(IEditor editor, LanguageServiceVhdl ls) : base(editor,
LineCommentSequence = "--";
_snippets ??= TextMateSnippetHelper.ParseVsCodeSnippets("avares://OneWare.Vhdl/Assets/vhdl.json");
+
+ _settingsService = settingsService;
}
protected override Task ShowCompletionAsync(CompletionTriggerKind triggerKind, string? triggerChar)
@@ -35,11 +42,13 @@ protected override Task> GetCustomCompletionItemsAsync()
{
var items = new List();
- if (_snippets != null)
+ if (_settingsService.GetSettingValue(VhdlModule.EnableSnippetsSetting) && _snippets != null)
+ {
items.AddRange(_snippets.Select(snippet => new CompletionData(snippet.Content, snippet.Label, null,
snippet.Description, TypeAssistanceIconStore.Instance.Icons[CompletionItemKind.Snippet], 0,
CodeBox.CaretOffset)));
-
+ }
+
return Task.FromResult(items);
}
diff --git a/src/OneWare.Vhdl/VhdlModule.cs b/src/OneWare.Vhdl/VhdlModule.cs
index fa5215f2..e282dc11 100644
--- a/src/OneWare.Vhdl/VhdlModule.cs
+++ b/src/OneWare.Vhdl/VhdlModule.cs
@@ -13,6 +13,7 @@ public class VhdlModule : IModule
{
public const string LspName = "RustHDL";
public const string LspPathSetting = "VhdlModule_RustHdlPath";
+ public const string EnableSnippetsSetting = "VhdlModule_EnableSnippets";
public static readonly Package RustHdlPackage = new()
{
@@ -154,6 +155,9 @@ public void OnInitialized(IContainerProvider containerProvider)
containerProvider.Resolve().RegisterTitledFilePath("Languages", "VHDL", LspPathSetting,
"RustHDL Path", "Path for RustHDL executable", "",
null, containerProvider.Resolve().PackagesDirectory, File.Exists, PlatformHelper.ExeFile);
+
+ containerProvider.Resolve().RegisterTitled("Languages", "VHDL", EnableSnippetsSetting,
+ "Enable Snippets", "Enable snippets that provide rich completion. These are not smart or context based.", true);
containerProvider.Resolve().RegisterErrorSource(LspName);
containerProvider.Resolve().RegisterTextMateLanguage("vhdl",