コード例 #1
0
        //[SuppressMessage("", "RS0001")] // TODO: This suppression should be removed once we have rulesets in place for Roslyn.sln
        private static IEnumerable <SectionBlock> ParseGlobal(TextReader reader)
        {
            if (reader.Peek() == -1)
            {
                return(Enumerable.Empty <SectionBlock>());
            }

            if (GetNextNonEmptyLine(reader) != "Global")
            {
                //throw new Exception(string.Format(WorkspacesResources.MissingLineInSolutionFile, "Global"));
                throw new Exception();
            }

            var globalSectionBlocks = new List <SectionBlock>();

            // The blocks inside here are indented
            while (reader.Peek() != -1 && char.IsWhiteSpace((char)reader.Peek()))
            {
                globalSectionBlocks.Add(SectionBlock.Parse(reader));
                ConsumeEmptyLines(reader);
            }

            if (GetNextNonEmptyLine(reader) != "EndGlobal")
            {
                //throw new Exception(string.Format(WorkspacesResources.MissingLineInSolutionFile, "EndGlobal"));
                throw new Exception();
            }

            ConsumeEmptyLines(reader);
            return(globalSectionBlocks);
        }
コード例 #2
0
ファイル: SolutionFile.cs プロジェクト: tinaschrepfer/roslyn
        [SuppressMessage("", "RS0001")] // TODO: This suppression should be removed once we have rulesets in place for Roslyn.sln
        private static IEnumerable <SectionBlock> ParseGlobal(TextReader reader)
        {
            if (reader.Peek() == -1)
            {
                return(Enumerable.Empty <SectionBlock>());
            }

            if (GetNextNonEmptyLine(reader) != "Global")
            {
                throw new Exception(string.Format(WorkspacesResources.MissingLineInSolutionFile, "Global"));
            }

            var globalSectionBlocks = new List <SectionBlock>();

            // The blocks inside here are indented
            while (reader.Peek() != -1 && char.IsWhiteSpace((char)reader.Peek()))
            {
                globalSectionBlocks.Add(SectionBlock.Parse(reader));
            }

            if (GetNextNonEmptyLine(reader) != "EndGlobal")
            {
                throw new Exception(string.Format(WorkspacesResources.MissingLineInSolutionFile, "EndGlobal"));
            }

            // Consume potential empty lines at the end of the global block
            while (reader.Peek() != -1 && "\r\n".Contains((char)reader.Peek()))
            {
                reader.ReadLine();
            }

            return(globalSectionBlocks);
        }
コード例 #3
0
        internal static ProjectBlock Parse(TextReader reader)
        {
            var startLine = reader.ReadLine().TrimStart(null);
            var scanner   = new LineScanner(startLine);

            if (scanner.ReadUpToAndEat("(\"") != "Project")
            {
                //throw new Exception(string.Format(WorkspacesResources.InvalidProjectBlockInSolutionFile4, "Project"));
                throw new Exception();
            }

            var projectTypeGuid = Guid.Parse(scanner.ReadUpToAndEat("\")"));

            // Read chars upto next quote, must contain "=" with optional leading/trailing whitespaces.
            if (scanner.ReadUpToAndEat("\"").Trim() != "=")
            {
                //throw new Exception(WorkspacesResources.InvalidProjectBlockInSolutionFile);
                throw new Exception();
            }

            var projectName = scanner.ReadUpToAndEat("\"");

            // Read chars upto next quote, must contain "," with optional leading/trailing whitespaces.
            if (scanner.ReadUpToAndEat("\"").Trim() != ",")
            {
                //throw new Exception(WorkspacesResources.InvalidProjectBlockInSolutionFile2);
                throw new Exception();
            }

            var projectPath = scanner.ReadUpToAndEat("\"");

            // Read chars upto next quote, must contain "," with optional leading/trailing whitespaces.
            if (scanner.ReadUpToAndEat("\"").Trim() != ",")
            {
                //throw new Exception(WorkspacesResources.InvalidProjectBlockInSolutionFile3);
                throw new Exception();
            }

            var projectGuid = Guid.Parse(scanner.ReadUpToAndEat("\""));

            var projectSections = new List <SectionBlock>();

            while (char.IsWhiteSpace((char)reader.Peek()))
            {
                projectSections.Add(SectionBlock.Parse(reader));
            }

            // Expect to see "EndProject" but be tolerant with missing tags as in Dev12.
            // Instead, we may see either P' for "Project" or 'G' for "Global", which will be handled next.
            if (reader.Peek() != 'P' && reader.Peek() != 'G')
            {
                if (reader.ReadLine() != "EndProject")
                {
                    //throw new Exception(string.Format(WorkspacesResources.InvalidProjectBlockInSolutionFile4, "EndProject"));
                    throw new Exception();
                }
            }

            return(new ProjectBlock(projectTypeGuid, projectName, projectPath, projectGuid, projectSections));
        }