private void OnTextChanged(object sender, TextContentChangedEventArgs args) { AntlrLanguageClient alc = AntlrLanguageClient.Instance; if (alc == null) { return; } string ffn = _buffer.GetFFN(); if (ffn == null) { return; } Workspaces.Document document = Workspaces.Workspace.Instance.FindDocument(ffn); if (document == null) { return; } LanguageServer.IParserDescription _grammar_description = LanguageServer.ParserDescriptionFactory.Create(document); if (_grammar_description == null) { return; } if (_buffer.CurrentSnapshot == null) { return; } document.Code = _buffer.CurrentSnapshot.GetText(); }
public IEnumerable <ITagSpan <ClassificationTag> > GetTags(NormalizedSnapshotSpanCollection spans) { ThreadHelper.ThrowIfNotOnUIThread(); if (!Options.Option.GetBoolean("SemanticHighlighting")) { yield break; } // Checks to partially fix https://github.com/kaby76/AntlrVSIX/issues/31#. string ffn = _buffer.GetFFN(); if (ffn == null) { yield break; } var doc = Workspaces.Workspace.Instance.FindDocument(ffn); LanguageServer.IParserDescription _grammar_description = LanguageServer.ParserDescriptionFactory.Create(doc); if (_grammar_description == null) { yield break; } _ = IVsTextViewExtensions.FindTextViewFor(ffn); foreach (SnapshotSpan curSpan in spans) { SnapshotPoint start = curSpan.Start; SnapshotPoint end = curSpan.End; string text = curSpan.GetText(); int curLocStart = start.Position; int curLocEnd = end.Position; LanguageServer.CMClassifierInformation[] sorted_combined_tokens = AntlrLanguageClient.CMGetClassifiers(curLocStart, curLocEnd - 1, ffn); if (sorted_combined_tokens == null) { continue; } foreach (LanguageServer.CMClassifierInformation r in sorted_combined_tokens) { int type = (int)r.Kind; if (type < 0) { continue; } int i = r.start; int i2 = r.end; int length = i2 - i; if (length < 0) { continue; } TagSpan <ClassificationTag> result = null; try { ITextSnapshot a = curSpan.Snapshot.TextBuffer.CurrentSnapshot; ITextSnapshot b = curSpan.Snapshot; SnapshotSpan tokenSpan = new SnapshotSpan( curSpan.Snapshot.TextBuffer.CurrentSnapshot, //curSpan.Snapshot, new Span(i, length)); result = new TagSpan <ClassificationTag>(tokenSpan, new ClassificationTag(_to_classifiertype[type])); } catch (Exception) { //Logger.Log.Notify(exception.StackTrace); } if (result != null) { yield return(result); } } } }
internal void Initialize(IClassificationTypeRegistryService service, IClassificationFormatMapService ClassificationFormatMapService) { try { if (initialized) { return; } string ffn = _buffer.GetFFN(); if (ffn == null) { return; } Workspaces.Document document = Workspaces.Workspace.Instance.FindDocument(ffn); LanguageServer.IParserDescription _grammar_description = LanguageServer.ParserDescriptionFactory.Create(document); if (_grammar_description == null) { return; } _to_classifiertype = new Dictionary <int, IClassificationType>(); IClassificationFormatMap classificationFormatMap = ClassificationFormatMapService.GetClassificationFormatMap(category: "text"); // hardwire colors to VS's colors of selected types. System.Collections.ObjectModel.ReadOnlyCollection <IClassificationType> list_of_formats = classificationFormatMap.CurrentPriorityOrder; { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationNonterminalDef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrNonterminalDef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable CS0168 // Variable is declared but never used catch (Exception eeks) { } #pragma warning restore CS0168 // Variable is declared but never used } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationNonterminalRef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrNonterminalRef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationTerminalDef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrTerminalDef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationTerminalRef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrTerminalRef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationComment; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrComment")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationKeyword; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrKeyword")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationLiteral; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrLiteral")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationModeDef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrModeDef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationModeRef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrModeRef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationChannelDef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrChannelDef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationChannelRef; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrChannelRef")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationPunctuation; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrPunctuation")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } { int i = (int)LanguageServer.Antlr4ParsingResults.AntlrClassifications.ClassificationOperator; string val = _grammar_description.Map[i]; IClassificationType identiferClassificationType = service.GetClassificationType(val); IClassificationType classificationType = identiferClassificationType ?? service.CreateClassificationType(val, Array.Empty <IClassificationType>()); IClassificationType t = list_of_formats.Where(f => f != null && f.Classification == Options.Option.GetString("AntlrOperator")).FirstOrDefault(); if (t != null) { try { Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties identifierProperties = classificationFormatMap .GetExplicitTextProperties(t); classificationFormatMap.AddExplicitTextProperties(classificationType, identifierProperties); } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 } _to_classifiertype[i] = classificationType; } initialized = true; } #pragma warning disable 0168 catch (Exception eeks) { } #pragma warning restore 0168 }