Beispiel #1
0
        public override ParsedDocument Parse(bool storeAst, string fileName, System.IO.TextReader content, Projects.Project project = null)
        {
            currentDocument = openDocuments.FirstOrDefault(d => d != null && d.FileName == fileName);
            // We need document and project to be loaded to correctly initialize Razor Host.
            this.project = project as DotNetProject;
            if (currentDocument == null && !TryAddDocument(fileName))
            {
                return(new RazorCSharpParsedDocument(fileName, new RazorCSharpPageInfo()));
            }

            this.aspProject = project as AspMvcProject;

            EnsureParserInitializedFor(fileName);

            var errors = new List <Error> ();

            using (var source = new SeekableTextReader(content)) {
                var textChange  = CreateTextChange(source);
                var parseResult = editorParser.CheckForStructureChanges(textChange);
                if (parseResult == PartialParseResult.Rejected)
                {
                    parseComplete.WaitOne();
                    if (!capturedArgs.GeneratorResults.Success)
                    {
                        GetRazorErrors(errors);
                    }
                }
            }

            ParseHtmlDocument(errors);
            CreateCSharpParsedDocument();
            ClearLastChange();

            RazorHostKind kind = RazorHostKind.WebPage;

            if (editorParser.Host is WebCodeRazorHost)
            {
                kind = RazorHostKind.WebCode;
            }
            else if (editorParser.Host is MonoDevelop.RazorGenerator.RazorHost)
            {
                kind = RazorHostKind.Template;
            }

            var pageInfo = new RazorCSharpPageInfo()
            {
                HtmlRoot         = htmlParsedDocument,
                GeneratorResults = capturedArgs.GeneratorResults,
                Spans            = editorParser.CurrentParseTree.Flatten(),
                CSharpParsedFile = parsedCodeFile,
                CSharpCode       = csharpCode,
                Errors           = errors,
                FoldingRegions   = GetFoldingRegions(),
                Comments         = comments,
                Compilation      = CreateCompilation(),
                HostKind         = kind,
            };

            return(new RazorCSharpParsedDocument(fileName, pageInfo));
        }
        public static CompletionDataList GetAllRazorSymbols(RazorHostKind kind)
        {
            var list = new CompletionDataList();

            AddAllRazorSymbols(list, kind);
            return(list);
        }
        public static void AddRazorDirectives(CompletionDataList list, RazorHostKind kind)
        {
            string icon = "md-keyword";

            list.Add("helper", icon, GettextCatalog.GetString("Defines a helper"));
            list.Add("functions", icon, GettextCatalog.GetString("Defines a region of class members"));
            list.Add("using", icon, GettextCatalog.GetString("Imports a namespace"));

            if (kind == RazorHostKind.WebCode)
            {
                return;
            }

            list.Add("inherits", icon, GettextCatalog.GetString("Defines a base class of the view"));
            list.Add("model", icon, GettextCatalog.GetString("References a strongly-typed model"));

            if (kind == RazorHostKind.WebPage)
            {
                list.Add("layout", icon, GettextCatalog.GetString("Defines a layout file to use in this view"));
                list.Add("sessionstate", icon, GettextCatalog.GetString("Defines a sessionstate mode"));
                list.Add("section", icon, GettextCatalog.GetString("Defines a section"));
            }
            else if (kind == RazorHostKind.Template)
            {
                list.Add("__class", icon, GettextCatalog.GetString("Customizes the generated class"));
                list.Add("__property", icon, GettextCatalog.GetString("Adds a property"));
            }
        }
        public static CompletionDataList GetRazorDirectives(RazorHostKind kind)
        {
            var list = new CompletionDataList();

            AddRazorDirectives(list, kind);
            return(list);
        }
 public static void AddAllRazorSymbols(CompletionDataList list, RazorHostKind kind)
 {
     if (list == null)
     {
         return;
     }
     AddRazorBeginExpressions(list);
     AddRazorDirectives(list, kind);
     AddRazorTemplates(list, kind);
 }
Beispiel #6
0
        System.Threading.Tasks.Task <ParsedDocument> Parse(RazorCSharpParserContext context, CancellationToken cancellationToken)
        {
            EnsureParserInitializedFor(context);

            var errors = new List <Error> ();

            using (var source = new SeekableTextReader(context.Content.CreateReader())) {
                var textChange  = CreateTextChange(context, source);
                var parseResult = context.EditorParser.CheckForStructureChanges(textChange);
                if (parseResult == PartialParseResult.Rejected)
                {
                    context.RazorDocument.ParseComplete.WaitOne();
                    if (!context.CapturedArgs.GeneratorResults.Success)
                    {
                        GetRazorErrors(context, errors);
                    }
                }
            }

            ParseHtmlDocument(context, errors);
            CreateCSharpParsedDocument(context);
            context.ClearLastTextChange();

            RazorHostKind kind = RazorHostKind.WebPage;

            if (context.EditorParser.Host is WebCodeRazorHost)
            {
                kind = RazorHostKind.WebCode;
            }
            else if (context.EditorParser.Host is MonoDevelop.AspNet.Razor.Generator.PreprocessedRazorHost)
            {
                kind = RazorHostKind.Template;
            }

            var model    = context.AnalysisDocument.GetSemanticModelAsync(cancellationToken).Result;
            var pageInfo = new RazorCSharpPageInfo()
            {
                HtmlRoot         = context.HtmlParsedDocument,
                GeneratorResults = context.CapturedArgs.GeneratorResults,
                Spans            = context.EditorParser.CurrentParseTree.Flatten(),
                CSharpSyntaxTree = context.ParsedSyntaxTree,
                ParsedDocument   = new DefaultParsedDocument("generated.cs")
                {
                    Ast = model
                },
                AnalysisDocument = context.AnalysisDocument,
                CSharpCode       = context.CSharpCode,
                Errors           = errors,
                FoldingRegions   = GetFoldingRegions(context),
                Comments         = context.Comments,
                HostKind         = kind,
            };

            return(System.Threading.Tasks.Task.FromResult((ParsedDocument) new RazorCSharpParsedDocument(context.FileName, pageInfo)));
        }
		static void AddRazorTemplates (CompletionDataList list, RazorHostKind kind)
		{
			string icon = "md-template";
			list.Add ("inherits", icon, GettextCatalog.GetString ("Template for inherits directive"));
			list.Add ("model", icon, GettextCatalog.GetString ("Template for model directive"));
			list.Add ("helper", icon, GettextCatalog.GetString ("Template for helper directive"));
			list.Add ("functions", icon, GettextCatalog.GetString ("Template for functions directive"));
			list.Add ("using", icon, GettextCatalog.GetString ("Template for using statement"));

			if (kind == RazorHostKind.WebPage) {
				list.Add ("section", icon, GettextCatalog.GetString ("Template for section directive"));
			}
		}
        static void AddRazorTemplates(CompletionDataList list, RazorHostKind kind)
        {
            string icon = "md-template";

            list.Add("inherits", icon, GettextCatalog.GetString("Template for inherits directive"));
            list.Add("model", icon, GettextCatalog.GetString("Template for model directive"));
            list.Add("helper", icon, GettextCatalog.GetString("Template for helper directive"));
            list.Add("functions", icon, GettextCatalog.GetString("Template for functions directive"));
            list.Add("using", icon, GettextCatalog.GetString("Template for using statement"));

            if (kind == RazorHostKind.WebPage)
            {
                list.Add("section", icon, GettextCatalog.GetString("Template for section directive"));
            }
        }
		public static void AddRazorDirectives (CompletionDataList list, RazorHostKind kind)
		{
			string icon = "md-keyword";

			list.Add ("helper", icon, GettextCatalog.GetString ("Defines a helper"));
			list.Add ("functions", icon, GettextCatalog.GetString ("Defines a region of class members"));
			list.Add ("using", icon, GettextCatalog.GetString ("Imports a namespace"));

			if (kind == RazorHostKind.WebCode)
				return;

			list.Add ("inherits", icon, GettextCatalog.GetString ("Defines a base class of the view"));
			list.Add ("model", icon, GettextCatalog.GetString ("References a strongly-typed model"));

			if (kind == RazorHostKind.WebPage) {
				list.Add ("layout", icon, GettextCatalog.GetString ("Defines a layout file to use in this view"));
				list.Add ("sessionstate", icon, GettextCatalog.GetString ("Defines a sessionstate mode"));
				list.Add ("section", icon, GettextCatalog.GetString ("Defines a section"));
			} else if (kind == RazorHostKind.Template) {
				list.Add ("__class", icon, GettextCatalog.GetString ("Customizes the generated class"));
				list.Add ("__property", icon, GettextCatalog.GetString ("Adds a property"));
			}
		}
		public static void AddAllRazorSymbols (CompletionDataList list, RazorHostKind kind)
		{
			if (list == null)
				return;
			AddRazorBeginExpressions (list);
			AddRazorDirectives (list, kind);
			AddRazorTemplates (list, kind);
		}
		public static CompletionDataList GetAllRazorSymbols (RazorHostKind kind)
		{
			var list = new CompletionDataList ();
			AddAllRazorSymbols (list, kind);
			return list;
		}
		public static CompletionDataList GetRazorDirectives (RazorHostKind kind)
		{
			var list = new CompletionDataList ();
			AddRazorDirectives (list, kind);
			return list;
		}