Esempio n. 1
0
        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());
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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());
            }
        }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
        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());
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
            }
        }
Esempio n. 10
0
 public void Update(AmmyFile <Top> file)
 {
     _recentFile = file;
 }
Esempio n. 11
0
        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);
        }