Example #1
0
        private void UpdateFoldingRegions(ICompilationUnit compilationUnit, CSParserResults parserResults)
        {
            var directives     = new Stack <PreprocessingDirective>();
            var foldingRegions = compilationUnit.FoldingRegions;

            // Collect all #region and #endregion directives and push them on a stack.
            foreach (var special in parserResults.Specials)
            {
                var directive = special as PreprocessingDirective;
                if (directive != null)
                {
                    if (directive.Cmd == "#region")
                    {
                        directives.Push(directive);
                    }
                    else if (directive.Cmd == "#endregion")
                    {
                        if (directives.Count > 0)
                        {
                            var o = directives.Pop();
                            var l = DomRegion.FromLocation(o.StartPosition, directive.EndPosition);
                            foldingRegions.Add(new FoldingRegion(o.Arg.Trim(), l));
                        }
                    }
                }
            }
        }
Example #2
0
 private void AddCommentTags(ICompilationUnit compilationUnit, CSParserResults parserResults)
 {
     foreach (var tagComment in parserResults.TagComments)
     {
         var tagRegion = new DomRegion(tagComment.StartPosition.Y, tagComment.StartPosition.X);
         var tag       = new TagComment(tagComment.Tag, tagRegion, tagComment.CommentText);
         compilationUnit.TagComments.Add(tag);
     }
 }
Example #3
0
        private void UpdateParseInfo(CSParserResults results)
        {
            var filename           = Location.LocalPath;
            var oldCompilationUnit = FParseInfo.MostRecentCompilationUnit;
            var projectContent     = GetProjectContent();

            var visitor = new NRefactoryASTConvertVisitor(projectContent);

            visitor.Specials = results.Specials;
            visitor.VisitCompilationUnit(results.CompilationUnit, null);

            var newCompilationUnit = visitor.Cu;

            newCompilationUnit.ErrorsDuringCompile = results.HasErrors;
            newCompilationUnit.FileName            = filename;

            UpdateFoldingRegions(newCompilationUnit, results);
            AddCommentTags(newCompilationUnit, results);

            projectContent.UpdateCompilationUnit(oldCompilationUnit, newCompilationUnit, filename);
            FParseInfo.SetCompilationUnit(newCompilationUnit);
        }
Example #4
0
        public void Parse(bool parseMethodBodies)
        {
            try
            {
                lock (FParseLock)
                {
                    FParserResults = CSParser.Parse(TextContent, parseMethodBodies);

                    var filename           = Location.LocalPath;
                    var oldCompilationUnit = FParseInfo.MostRecentCompilationUnit;
                    var projectContent     = GetProjectContent();

                    var visitor = new NRefactoryASTConvertVisitor(projectContent);
                    visitor.Specials = FParserResults.Specials;
                    visitor.VisitCompilationUnit(FParserResults.CompilationUnit, null);

                    var newCompilationUnit = visitor.Cu;
                    newCompilationUnit.ErrorsDuringCompile = FParserResults.HasErrors;
                    newCompilationUnit.FileName            = filename;

                    UpdateFoldingRegions(newCompilationUnit, FParserResults);
                    AddCommentTags(newCompilationUnit, FParserResults);

                    // Remove information from lastCompilationUnit and add information from newCompilationUnit.
                    projectContent.UpdateCompilationUnit(oldCompilationUnit, newCompilationUnit, filename);
                    FParseInfo.SetCompilationUnit(newCompilationUnit);
                }
            }
            catch (Exception e)
            {
                Shell.Instance.Logger.Log(e);
            } finally
            {
                FParsingDone.Set();
            }
        }