From 5ee94b829b7f7211e882cfa9763cfec611bc6c3a Mon Sep 17 00:00:00 2001 From: Mads Kristensen Date: Mon, 27 Dec 2021 09:34:40 -0800 Subject: [PATCH] Improvements to IntelliSense [release] --- README.md | 7 ++++++- art/formatting.png | Bin 0 -> 34766 bytes src/BaseClasses/TokenErrorTaggerBase.cs | 5 ----- src/BaseClasses/TokenTaggerConsumerBase.cs | 6 +----- src/Language/EditorFeatures.cs | 8 -------- src/Language/IntelliSense.cs | 13 +++++++++---- vs-publish.json | 4 ++++ 7 files changed, 20 insertions(+), 23 deletions(-) create mode 100644 art/formatting.png diff --git a/README.md b/README.md index 29b304b..02589f1 100644 --- a/README.md +++ b/README.md @@ -29,4 +29,9 @@ Collapse sections for better overview of the document. ![Outlining](art/outlining.png) -Notice how only comments starting with a semicolon is correctly identified as a comment. \ No newline at end of file +Notice how only comments starting with a semicolon is correctly identified as a comment. + +## Formatting +You can format the whole document `Ctrl+K,Ctrl+D` or the current selection `Ctrl+K,Ctrl+F`. It will add a line break between registry key entries, trim whitespace, and other clean-up formatting. + +![Formatting](art/formatting.png) \ No newline at end of file diff --git a/art/formatting.png b/art/formatting.png new file mode 100644 index 0000000000000000000000000000000000000000..d48b5fd703f3444065ddb5b808e4bcc8c9b0c76f GIT binary patch literal 34766 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 T%viJo00000NkvXXu0mjfzab`K literal 0 HcmV?d00001 diff --git a/src/BaseClasses/TokenErrorTaggerBase.cs b/src/BaseClasses/TokenErrorTaggerBase.cs index a1dc716..810b775 100644 --- a/src/BaseClasses/TokenErrorTaggerBase.cs +++ b/src/BaseClasses/TokenErrorTaggerBase.cs @@ -38,11 +38,6 @@ public override IEnumerable> GetTags(IMappingTagSpan(span, errorTag); } - - if (IsFullParse) - { - - } } } } diff --git a/src/BaseClasses/TokenTaggerConsumerBase.cs b/src/BaseClasses/TokenTaggerConsumerBase.cs index e5fcce0..fdba5fb 100644 --- a/src/BaseClasses/TokenTaggerConsumerBase.cs +++ b/src/BaseClasses/TokenTaggerConsumerBase.cs @@ -10,8 +10,6 @@ public abstract class TokenTaggerConsumerBase : ITagger, IDisposable private readonly ITagAggregator _tags; private bool _isDisposed; - public bool IsFullParse { get; private set; } - public TokenTaggerConsumerBase(ITagAggregator tags) { _tags = tags; @@ -20,12 +18,10 @@ public TokenTaggerConsumerBase(ITagAggregator tags) private void TokenTagsChanged(object sender, TagsChangedEventArgs e) { - ITextBuffer buffer = e.Span.AnchorBuffer; + ITextBuffer buffer = e.Span.BufferGraph.TopBuffer; SnapshotSpan span = new(buffer.CurrentSnapshot, 0, buffer.CurrentSnapshot.Length); - IsFullParse = true; TagsChanged?.Invoke(this, new SnapshotSpanEventArgs(span)); - IsFullParse = false; } public IEnumerable> GetTags(NormalizedSnapshotSpanCollection spans) diff --git a/src/Language/EditorFeatures.cs b/src/Language/EditorFeatures.cs index dc653ca..a89c3ac 100644 --- a/src/Language/EditorFeatures.cs +++ b/src/Language/EditorFeatures.cs @@ -14,7 +14,6 @@ namespace PkgdefLanguage [Export(typeof(ITaggerProvider))] [TagType(typeof(IClassificationTag))] [ContentType(Constants.LanguageName)] - [Name(Constants.LanguageName)] public class SyntaxHighligting : TokenClassificationTaggerBase { public override Dictionary ClassificationMap { get; } = new() @@ -31,27 +30,23 @@ public class SyntaxHighligting : TokenClassificationTaggerBase [Export(typeof(ITaggerProvider))] [TagType(typeof(IStructureTag))] [ContentType(Constants.LanguageName)] - [Name(Constants.LanguageName)] public class Outlining : TokenOutliningTaggerBase { } [Export(typeof(ITaggerProvider))] [TagType(typeof(IErrorTag))] [ContentType(Constants.LanguageName)] - [Name(Constants.LanguageName)] public class ErrorSquigglies : TokenErrorTaggerBase { } [Export(typeof(IWpfTextViewCreationListener))] [ContentType(Constants.LanguageName)] - [Name(Constants.LanguageName)] [TextViewRole(PredefinedTextViewRoles.PrimaryDocument)] internal sealed class ErrorList : TokenErrorListBase { } [Export(typeof(IAsyncQuickInfoSourceProvider))] [ContentType(Constants.LanguageName)] - [Name(Constants.LanguageName)] internal sealed class Tooltips : TokenQuickInfoBase { } @@ -62,14 +57,12 @@ internal sealed class Tooltips : TokenQuickInfoBase [BracePair('"', '"')] [BracePair('$', '$')] [ContentType(Constants.LanguageName)] - [Name(Constants.LanguageName)] [ProvideBraceCompletion(Constants.LanguageName)] internal sealed class BraceCompletion : BraceCompletionBase { } [Export(typeof(IAsyncCompletionCommitManagerProvider))] [ContentType(Constants.LanguageName)] - [Name(Constants.LanguageName)] internal sealed class CompletionCommitManager : CompletionCommitManagerBase { public override IEnumerable CommitChars => new char[] { ' ', '\'', '"', ',', '.', ';', ':', '\\', '$' }; @@ -78,7 +71,6 @@ internal sealed class CompletionCommitManager : CompletionCommitManagerBase [Export(typeof(IViewTaggerProvider))] [TagType(typeof(TextMarkerTag))] [ContentType(Constants.LanguageName)] - [Name(Constants.LanguageName)] internal sealed class BraceMatchingTaggerProvider : BraceMatchingBase { // This will match parenthesis, curly brackets, and square brackets by default. diff --git a/src/Language/IntelliSense.cs b/src/Language/IntelliSense.cs index 4aaf09b..77f1f89 100644 --- a/src/Language/IntelliSense.cs +++ b/src/Language/IntelliSense.cs @@ -113,13 +113,18 @@ public CompletionStartData InitializeCompletion(CompletionTrigger trigger, Snaps var column = triggerLocation.Position - item.Span.Start; var start = item.Text.LastIndexOf('\\', column - 1) + 1; var end = item.Text.IndexOf('\\', column); - end = end >= start ? end : item.Text.IndexOf(']', column); - end = end >= start ? end : item.Text.TrimEnd().Length; + var close = item.Text.IndexOf(']', column); + var textEnd = item.Text.IndexOf(']', column); + end = end >= start ? end : close; + end = end >= start ? end : textEnd; if (end >= start) { - var span = new SnapshotSpan(triggerLocation.Snapshot, item.Span.Start + start, end - start); - return new CompletionStartData(CompletionParticipation.ProvidesItems, span); + if (close == -1 || column <= close) + { + var span = new SnapshotSpan(triggerLocation.Snapshot, item.Span.Start + start, end - start); + return new CompletionStartData(CompletionParticipation.ProvidesItems, span); + } } } diff --git a/vs-publish.json b/vs-publish.json index 30d2a73..e148b2b 100644 --- a/vs-publish.json +++ b/vs-publish.json @@ -9,6 +9,10 @@ "pathOnDisk": "art/colorization.png", "targetPath": "art/colorization.png" }, + { + "pathOnDisk": "art/formatting.png", + "targetPath": "art/formatting.png" + }, { "pathOnDisk": "art/intellisense.gif", "targetPath": "art/intellisense.gif"