コード例 #1
0
ファイル: SpringParser.cs プロジェクト: kuklinamd/spring-lang
        public IFile ParseFile()
        {
            using (var def = Lifetime.Define())
            {
                var builder  = new PsiBuilder(myLexer, SpringFileNodeType.Instance, new TokenFactory(), def.Lifetime);
                var fileMark = builder.Mark();

                StringBuilder b = new StringBuilder();
                foreach (var tok in myLexer.Tokens())
                {
                    b.Append(tok + " ");
                }

                b.ToString();

                ParseDefines(builder);

                builder.Done(fileMark, SpringFileNodeType.Instance, null);
                var file = (IFile)builder.BuildTree();

                SprintTreeScopeUtl.InitScopes(file);

                var sb = new StringBuilder();
                DebugUtil.DumpPsi(new StringWriter(sb), file);
                sb.ToString();

                return(file);
            }
        }
コード例 #2
0
ファイル: SpringParser.cs プロジェクト: XJIE6/spring-lang
 public IFile ParseFile()
 {
     using (var def = Lifetime.Define())
     {
         var builder  = new PsiBuilder(myLexer, SpringFileNodeType.Instance, new TokenFactory(), def.Lifetime);
         var fileMark = builder.Mark();
         ParseSeq(builder);
         builder.Done(fileMark, SpringFileNodeType.Instance, null);
         var file          = (IFile)builder.BuildTree();
         var stringBuilder = new StringBuilder();
         DebugUtil.DumpPsi(new StringWriter(stringBuilder), file);
         stringBuilder.ToString();
         return(file);
     }
 }
コード例 #3
0
        protected override void DoTest(IProject testProject)
        {
            ShellInstance.GetComponent <TestIdGenerator>().Reset();
            using (var textControl = OpenTextControl(testProject))
            {
                ExecuteWithGold(textControl.Document, sw =>
                {
                    var files = textControl
                                .Document
                                .GetPsiSourceFiles(Solution)
                                .SelectMany(s => s.GetPsiFiles <TLanguage>())
                                .ToList();
                    files.Sort((file1, file2) => String.Compare(file1.Language.Name, file2.Language.Name, StringComparison.Ordinal));
                    foreach (var psiFile in files)
                    {
                        // Assert all chameleons are closed by default
                        var chameleons = psiFile.ThisAndDescendants <IChameleonNode>();
                        while (chameleons.MoveNext())
                        {
                            var chameleonNode = chameleons.Current;
                            if (chameleonNode.IsOpened && !(chameleonNode is IComment))
                            {
                                Assertion.Fail("Found chameleon node that was opened after parser is invoked: '{0}'", chameleonNode.GetText());
                            }

                            chameleons.SkipThisNode();
                        }

                        // Dump the PSI tree, opening all chameleons
                        sw.WriteLine("Language: {0}", psiFile.Language);
                        DebugUtil.DumpPsi(sw, psiFile);
                        sw.WriteLine();
                        if (((IFileImpl)psiFile).SecondaryRangeTranslator is RangeTranslatorWithGeneratedRangeMap rangeTranslator)
                        {
                            WriteCommentedText(sw, "//", rangeTranslator.Dump(psiFile));
                        }

                        // Verify textual contents
                        var originalText = textControl.Document.GetText();
                        Assert.AreEqual(originalText, psiFile.GetText(), "Reconstructed text mismatch");
                        CheckRange(originalText, psiFile);
                    }
                });
            }
        }
コード例 #4
0
        protected override void DoOneTest(string testName)
        {
            Logger.Catch(() =>
            {
                testName     = testName + ".js";
                var testFile = GetTestDataFilePath2(testName);
                ExecuteWithGold(testName, writer =>
                {
                    var expressions = File.ReadAllLines(testFile.FullPath);
                    foreach (var angularJsExpression in expressions)
                    {
                        var buffer = new StringBuffer(angularJsExpression);
                        var lexer  = new AngularJsLexerGenerated(buffer);
                        var parser = new AngularJsParser(lexer);

                        try
                        {
                            var parsedFile = parser.ParseFile();

                            Assert.NotNull(parsedFile);

                            writer.WriteLine("Expression: «{0}»", angularJsExpression);
                            writer.WriteLine("Language: {0}", parsedFile.Language);
                            DebugUtil.DumpPsi(writer, parsedFile);
                            writer.WriteLine();
                            var containingFile = parsedFile.GetContainingFile();
                            if (containingFile != null)
                            {
                                var rangeTranslator =
                                    ((IFileImpl)containingFile).SecondaryRangeTranslator as
                                    RangeTranslatorWithGeneratedRangeMap;
                                if (rangeTranslator != null)
                                {
                                    WriteCommentedText(writer, "//", rangeTranslator.Dump(containingFile));
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            writer.WriteLine(e);
                        }
                    }
                });
            });
        }
コード例 #5
0
        protected override void DoTest(IProject testProject)
        {
            var projectFile = testProject.GetAllProjectFiles().FirstNotNull();

            Assert.NotNull(projectFile);

            var text   = projectFile.Location.ReadAllText2();
            var buffer = new StringBuffer(text.Text);

            var languageService = ShaderLabLanguage.Instance.LanguageService().NotNull();
            var lexer           = languageService.GetPrimaryLexerFactory().CreateLexer(buffer);
            var psiModule       = Solution.PsiModules().GetPrimaryPsiModule(testProject, TargetFrameworkId.Default);
            var parser          = languageService.CreateParser(lexer, psiModule, null);
            var psiFile         = parser.ParseFile().NotNull();

            if (DebugUtil.HasErrorElements(psiFile))
            {
                DebugUtil.DumpPsi(Console.Out, psiFile);
                Assert.Fail("File contains error elements");
            }

            Assert.AreEqual(text.Text, psiFile.GetText(), "Reconstructed text mismatch");
            CheckRange(text.Text, psiFile);
        }
コード例 #6
0
ファイル: SpringParser.cs プロジェクト: demarkok/spring-lang
        public IFile ParseFile()
        {
            using (var def = Lifetime.Define())
            {
                var builder = new PsiBuilder(myLexer, SpringFileNodeType.Instance, new TokenFactory(), def.Lifetime);

                SpringLangLexer  antlrLexer  = new SpringLangLexer(new AntlrInputStream(myLexer.Buffer.GetText()));
                SpringLangParser antlrParser = new SpringLangParser(new CommonTokenStream(antlrLexer));

                BuilderVisitor visitor = new BuilderVisitor(builder);

                visitor.Visit(antlrParser.program());

                // ParseBlock(builder);

                var file = (IFile)builder.BuildTree();

                var stringBuilder = new StringBuilder();
                DebugUtil.DumpPsi(new StringWriter(stringBuilder), file);
                stringBuilder.ToString();

                return(file);
            }
        }