Пример #1
0
        private void VisitFiles(string directoryPath)
        {
            foreach (var file in _directoryReader.EnumerateFiles(directoryPath))
            {
                VisitFile(file);

                var extension = _pathReader.GetExtension(file);

                if (_defaultRepositoryVisitorFilter.IsSolutionFile(extension))
                {
                    VisitSolution(file);
                }
                else if (_defaultRepositoryVisitorFilter.IsProjectFile(extension))
                {
                    VisitProject(file);
                }
                else if (_defaultRepositoryVisitorFilter.IsSourceFile(extension))
                {
                    VisitSourceFile(file);
                }
            }

            foreach (var directory in _directoryReader.EnumerateDirectories(directoryPath))
            {
                VisitFiles(directory);
            }
        }
        public IParser <Solution> CreateParser(string path)
        {
            var extension = _pathReader.GetExtension(path);

            switch (extension)
            {
            case ".sln":
                return(new SolutionParser(_fileReader, _directoryReader, _pathReader));

            default:
                throw new NotImplementedException("Parser not implemented for this type of solution.");
            }
        }
        public IParser <Project> CreateParser(string path)
        {
            var extension = _pathReader.GetExtension(path);

            switch (extension)
            {
            case ".csproj":
                return(new CSharpProjectParser(_repositoryRegistry, _xmlReader, _pathReader));

            case ".vcxproj":
                return(new VCXProjectParser(_repositoryRegistry, _xmlReader, _pathReader));

            case ".vcproj":
                return(new VCProjectParser(_repositoryRegistry, _xmlReader, _pathReader));

            default:
                throw new NotImplementedException("Parser not implemented for this type of project.");
            }
        }
Пример #4
0
        public IEnumerable <Problem> FindProblems(CodeBase codeBase)
        {
            if (_analyzers.Count == 0)
            {
                yield break;
            }

            _problems.Clear();

            Parallel.ForEach(codeBase.SourceFiles.Select(x => x.Path).Where(p => _pathReader.GetExtension(p) == ".cs"), (path) =>
            {
                var content = _fileReader.ReadAllText(path);

                SyntaxTree syntaxTree      = CSharpSyntaxTree.ParseText(content);
                CompilationUnitSyntax root = syntaxTree.GetCompilationUnitRoot();

                Visit(root);
            });

            foreach (var problem in _problems)
            {
                yield return(problem);
            }
        }