예제 #1
0
 public CSharpParsedDocument(Ide.TypeSystem.ParseOptions options, string fileName) : base(fileName)
 {
     isAdHocProject = options.IsAdhocProject;
 }
예제 #2
0
        public override async Task <IReadOnlyList <Projection> > GenerateProjections(Ide.TypeSystem.ParseOptions options, CancellationToken cancellationToken = default(CancellationToken))
        {
            var razorDocument = (RazorCSharpParsedDocument) await Parse(options, cancellationToken);

            return(await GenerateProjections(razorDocument, options, cancellationToken));
        }
예제 #3
0
        public override async Task <ParsedDocumentProjection> GenerateParsedDocumentProjection(Ide.TypeSystem.ParseOptions options, CancellationToken cancellationToken = default(CancellationToken))
        {
            var razorDocument = (RazorCSharpParsedDocument) await Parse(options, cancellationToken);

            var projections = await GenerateProjections(razorDocument, options, cancellationToken);

            return(new ParsedDocumentProjection(razorDocument, projections));
        }
예제 #4
0
        Task <IReadOnlyList <Projection> > GenerateProjections(RazorCSharpParsedDocument razorDocument, Ide.TypeSystem.ParseOptions options, CancellationToken cancellationToken = default(CancellationToken))
        {
            var code = razorDocument.PageInfo.CSharpCode;

            if (string.IsNullOrEmpty(code))
            {
                return(Task.FromResult((IReadOnlyList <Projection>) new Projection[0]));
            }

            string filename        = razorDocument.PageInfo.ParsedDocument.FileName;
            var    currentMappings = razorDocument.PageInfo.GeneratorResults.DesignTimeLineMappings;

            return(Task.Run(() => {
                var doc = TextEditorFactory.CreateNewDocument(new StringTextSource(code), filename, "text/x-csharp");
                var segments = new List <ProjectedSegment> ();

                foreach (var map in currentMappings)
                {
                    string pattern = "#line " + map.Key + " ";
                    var idx = razorDocument.PageInfo.CSharpCode.IndexOf(pattern, StringComparison.Ordinal);
                    if (idx < 0)
                    {
                        continue;
                    }
                    var line = doc.GetLineByOffset(idx);
                    var offset = line.NextLine.Offset + map.Value.StartGeneratedColumn - 1;

                    var seg = new ProjectedSegment(map.Value.StartOffset.Value, offset, map.Value.CodeLength);
                    segments.Add(seg);
                }

                var projections = new List <Projection> ();
                projections.Add(new Projection(doc, segments));
                return (IReadOnlyList <Projection>)projections;
            }));
        }
예제 #5
0
 public VBNetParsedDocument(Ide.TypeSystem.ParseOptions options, string fileName) : base(fileName)
 {
     isAdHocProject = options.IsAdhocProject;
     Flags         |= ParsedDocumentFlags.SkipFoldings;
 }
예제 #6
0
 public CSharpParsedDocument(Ide.TypeSystem.ParseOptions options, string fileName) : base(fileName)
 {
     this.options = options;
 }