public void Update(AmmyFile <Top> file) { try { _currentSpans.Clear(); var fileSnapshot = (ITextSnapshot)file.Meta.Snapshot; var collector = new AstCollectorVisitor(ast => ast is PropertyValue.String || ast is PropertyValue.ReferenceValue); file.Ast.Accept(collector); foreach (var item in collector.CollectedItems) { if (item is PropertyValue.String) { var pvString = (PropertyValue.String)item; if (pvString.Val.HasValue) { var stringValue = pvString.Val.Value; var match = Regex.Match(stringValue, @"^#([0-9a-fA-F]{8})$|^#((?:[0-9a-fA-F]{3}){1,2})$"); if (match.Success) { var brush = ParseColorValue(match.Value); _currentSpans.Add(new ColorValueSpan(brush, new SnapshotSpan(fileSnapshot, item.Location.StartPos, item.Location.Length))); } } } else if (item is PropertyValue.ReferenceValue) { var rvalue = (PropertyValue.ReferenceValue)item; if (rvalue.IsRefEvaluated && rvalue.Ref.IsSymbolEvaluated) { var symbol = rvalue.Ref.Symbol; if (_brushesType.Namespace == null) { continue; } if (symbol.FullName.StartsWith(_brushesType.Namespace)) { foreach (var brushProperty in _brushProperties) { if (brushProperty.Name == symbol.Name) { var brush = GetPredefinedBrush(brushProperty); var location = rvalue.Ref.Location; _currentSpans.Add(new ColorValueSpan(brush, new SnapshotSpan(fileSnapshot, location.StartPos, location.Length))); } } } } } } } catch (Exception e) { this.LogDebugInfo(e.ToString()); } }
public void Update(AmmyFile <Top> file) { _latestFile = file; var snapshot = (ITextSnapshot)_latestFile.Meta.Snapshot; var args = new SnapshotSpanEventArgs(new SnapshotSpan(snapshot, 0, snapshot.Length)); TagsChanged?.Invoke(this, args); }
private void TryAssignSnapshot(AmmyFile <Top> file) { var doc = _openDocuments.FirstOrDefault(d => d.FilePath.Equals(file.FilePath, StringComparison.InvariantCultureIgnoreCase)); if (doc != null && doc.TextBuffer?.CurrentSnapshot?.Version != null) { file.Meta.UpdateSnapshot(doc.TextBuffer.CurrentSnapshot, doc.TextBuffer.CurrentSnapshot.Version.VersionNumber); } }
public void Update(AmmyFile <Top> file) { _latestFile = file; var snapshot = (ITextSnapshot)_latestFile.Meta.Snapshot; var snapshotSpan = new SnapshotSpan(snapshot, 0, snapshot.Length); var eventArgs = new ClassificationChangedEventArgs(snapshotSpan); ClassificationChanged?.Invoke(this, eventArgs); }
public void Update(AmmyFile <Top> file) { try { _currentSpans.Clear(); var fileSnapshot = (ITextSnapshot)file.Meta.Snapshot; var collector = new AstCollectorVisitor(ast => ast is Node || ast is TypeFunctionRef); file.Ast.Accept(collector); if (file.GetErrors().Any()) { return; } foreach (var item in collector.CollectedItems) { if (item.Location.EndLineColumn.Line - item.Location.StartLineColumn.Line < 5) { continue; } if (item is Node) { var node = (Node)item; var fullName = "end of " + node.Key.FullName(); if (node.NodeName.HasValue && node.NodeName.Value.Key.HasValue) { fullName += $" \"{node.NodeName.Value.Key.Value}\""; } var text = node.Location.GetText(); var closingBracketPos = text.LastIndexOf('}'); var position = node.Location.StartPos + closingBracketPos; _currentSpans.Add(new ClosingBracketSpan(fullName, new SnapshotSpan(fileSnapshot, position, 1))); } else if (item is TypeFunctionRef) { var tfr = (TypeFunctionRef)item; var fullName = "end of @" + tfr.FunctionRef.Name; var text = tfr.Location.GetText(); var closingBracketPos = text.LastIndexOf('}'); var position = tfr.Location.StartPos + closingBracketPos; _currentSpans.Add(new ClosingBracketSpan(fullName, new SnapshotSpan(fileSnapshot, position, 1))); } } } catch (Exception e) { this.LogDebugInfo(e.ToString()); } }
public void Update(AmmyFile <Top> file) { _colorMarkerAdornment.Update(file); _closingBracketAdornment.Update(file); _preferencesButtonAdornment.Update(file); _adornmentLayer.RemoveAdornmentsByTag(_colorMarkerAdornment); _adornmentLayer.RemoveAdornmentsByTag(_closingBracketAdornment); foreach (var line in _view.TextViewLines) { CreateVisuals(line); } }
public string FormatFile(AmmyFile <Top> file) { var sb = new StringBuilder(); var top = ((Start)file.Ast).Top; FormatUsings(top.Usings, sb, ""); FormatGlobalDeclarations(top.GlobalDeclarations, sb, ""); if (top is TopWithNode) { FormatTopWithNode((TopWithNode)top, sb, ""); } return(sb.ToString()); }
public void Update(AmmyFile <Top> file) { _regionList = new List <ITagSpan <IOutliningRegionTag> >(); var snapshot = (ITextSnapshot)file.Meta.Snapshot; var nodeCollector = new AstCollectorVisitor(ast => ast is Node || ast is Function || ast is TypeFunctionRef); file.Ast.Accept(nodeCollector); foreach (var item in nodeCollector.CollectedItems) { var location = item.Location; if (location.StartLineColumn.Line == location.EndLineColumn.Line) { continue; } var start = location.StartPos; var text = location.GetText(); var closingBracketPos = text.LastIndexOf('}'); var openingBraceIndex = text.IndexOf("{", StringComparison.InvariantCultureIgnoreCase); var ellipsis = openingBraceIndex > -1 ? text.Substring(0, openingBraceIndex) : text.Split(new[] { "\r\n", "\n" }, StringSplitOptions.None).FirstOrDefault(); var snapshotSpan = new SnapshotSpan(snapshot, start, closingBracketPos + 1); var outliningRegionTag = new OutliningRegionTag(false, false, ellipsis, text); var span = new TagSpan <IOutliningRegionTag>(snapshotSpan, outliningRegionTag); _regionList.Add(span); } var args = new SnapshotSpanEventArgs(new SnapshotSpan(snapshot, 0, snapshot.Length)); TagsChanged?.Invoke(this, args); }
public void Update(AmmyFile <Top> file) { var buffer = _textView.TextBuffer; if (file.Meta.Snapshot == null) { return; } try { if (buffer.Properties.ContainsProperty(typeof(ITagger <IOutliningRegionTag>))) { var tagger = (OutliningTagger)buffer.Properties.GetProperty(typeof(ITagger <IOutliningRegionTag>)); tagger.Update(file); } if (buffer.Properties.ContainsProperty(typeof(ITagger <IErrorTag>))) { var tagger = (ErrorTagger)buffer.Properties.GetProperty(typeof(ITagger <IErrorTag>)); tagger.Update(file); } if (buffer.Properties.ContainsProperty("AmmyClassifier")) { var classifier = (Classifier)buffer.Properties.GetProperty("AmmyClassifier"); classifier.Update(file); } if (_layer0 != null) { _layer0.Update(file); } } catch (Exception e) { Debug.WriteLine("Error updating services: " + e); } }
public void Update(AmmyFile <Top> file) { _recentFile = file; }
private IList <ClassificationSpan> GetSpansFor(ITextSnapshot compiledSnapshot, SnapshotSpan span, AmmyFile <Top> file) { var spanSnapshot = span.Snapshot; var result = new List <ClassificationSpan>(); var ast = file.Ast; var translatedSpan = span.TranslateTo(compiledSnapshot, SpanTrackingMode.EdgeExclusive); var spanInfos = new HashSet <SpanInfo>(); file.ParseResult.GetSpans(span.Start, span.End, spanInfos); var spanFinder = new FindSpansForVisitor(translatedSpan); ast.Accept(spanFinder); var allSpans = spanFinder.SpanInfos .Concat(spanInfos) .Where(si => si.Span.Length != spanSnapshot.Length) .Distinct(); foreach (var spanInfo in allSpans) { var astSpan = spanInfo.Span; var newSpan = new SnapshotSpan(compiledSnapshot, new Span(astSpan.StartPos, astSpan.Length)) .TranslateTo(spanSnapshot, SpanTrackingMode.EdgeInclusive); var classificationType = _classifications.GetClassificationType(TranslateSpanName(spanInfo.SpanClass.FullName)); if (!newSpan.IntersectsWith(span)) { continue; } if (newSpan.Start > 0) { var prefix = spanSnapshot.GetText(newSpan.Start - 1, 1); if (prefix == "@" || prefix == "#" || prefix == "$") { newSpan = new SnapshotSpan(newSpan.Snapshot, newSpan.Start - 1, newSpan.Length + 1); } } result.Add(new ClassificationSpan(newSpan, classificationType)); } return(result); }