/** * Helper method for testing checks without having to deploy them on a Sonar instance. */ public static SourceFile scanSingleFile(File file, CSharpConfiguration conf, SquidAstVisitor<Grammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException("File '" + file + "' not found."); } AstScanner<Grammar> scanner = create(conf, visitors); scanner.scanFile(file); Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class)); if (sources.size() != 1) { throw new IllegalStateException("Only one SourceFile was expected whereas " + sources.size() + " has been returned."); } return (SourceFile) sources.iterator().next(); }
/** * Analyzes files for a given project. * * @param project current project. * @param context sensor context. */ @Override public void analyse(Project project, SensorContext context) { this.context = context; List<SquidAstVisitor<Grammar>> visitors = Lists.newArrayList(checks.all()); scanner = ApexAstScanner.create(createConfiguration(), visitors.toArray(new SquidAstVisitor[visitors.size()])); scanner.scanFiles(Lists.newArrayList(fileSystem.files(filePredicate))); Collection<SourceCode> squidSourceFiles = scanner.getIndex() .search(new QueryByType(SourceFile.class)); save(squidSourceFiles); }
/** * Saves a measure with the limits of the function. * * @param sonarFile input file. * @param squidFile source file. */ private void saveFunctionsComplexityDistribution(InputFile sonarFile, SourceFile squidFile) { Collection<SourceCode> squidFunctionsInFile = scanner.getIndex().search( new QueryByParent(squidFile), new QueryByType(SourceFunction.class)); RangeDistributionBuilder complexityDistribution = new RangeDistributionBuilder( CoreMetrics.FUNCTION_COMPLEXITY_DISTRIBUTION, FUNCTIONS_DISTRIB_BOTTOM_LIMITS); squidFunctionsInFile.forEach(squidFunction -> complexityDistribution.add(squidFunction.getDouble(ApexMetric.COMPLEXITY)) ); context.saveMeasure(sonarFile, buildMeasure(complexityDistribution)); }
/** * Returns a scanner from configuration and visitors. * * @param config apex configuration. * @param visitors list of visitors. * @return a scanner. */ public static AstScanner<Grammar> create(ApexConfiguration config, SquidAstVisitor<Grammar>... visitors) { final SourceProject sourceProject = new SourceProject(PROJECT_NAME); final SquidAstVisitorContextImpl<Grammar> context = new SquidAstVisitorContextImpl<>(sourceProject); final Parser<Grammar> parser = ApexParser.create(config); AstScanner.Builder<Grammar> builder = AstScanner.<Grammar>builder(context).setBaseParser(parser); builder.withMetrics(ApexMetric.values()); builder.setFilesMetric(ApexMetric.FILES); setCommentAnalyser(builder); setClassesAnalyser(builder); setMethodAnalyser(builder); setMetrics(config, builder); for (SquidAstVisitor<Grammar> visitor : visitors) { builder.withSquidAstVisitor(visitor); } return builder.build(); }
public void scanFile(File file) { scanFiles(ImmutableList.of(file)); }
private void saveFunctionsComplexityDistribution(File sonarFile, SourceFile squidFile) { Collection<SourceCode> squidFunctionsInFile = scanner.getIndex().search(new QueryByParent(squidFile), new QueryByType(SourceFunction.class)); RangeDistributionBuilder complexityDistribution = new RangeDistributionBuilder(CoreMetrics.FUNCTION_COMPLEXITY_DISTRIBUTION, FUNCTIONS_DISTRIB_BOTTOM_LIMITS); for (SourceCode squidFunction : squidFunctionsInFile) { complexityDistribution.add(squidFunction.getDouble(ObjectiveCMetric.COMPLEXITY)); } context.saveMeasure(sonarFile, complexityDistribution.build().setPersistenceMode(PersistenceMode.MEMORY)); }
public static AstScanner<Grammar> create(PythonConfiguration conf, SquidAstVisitor<Grammar>... visitors) { final SquidAstVisitorContextImpl<Grammar> context = new SquidAstVisitorContextImpl<Grammar>(new SourceProject("Python Project")); final Parser<Grammar> parser = PythonParser.create(conf); AstScanner.Builder<Grammar> builder = AstScanner.<Grammar>builder(context).setBaseParser(parser); builder.withMetrics(PythonMetric.values()); builder.setFilesMetric(PythonMetric.FILES); setCommentAnalyser(builder); setClassesAnalyser(builder); setMethodAnalyser(builder); setMetrics(conf, builder); /* External visitors (typically Check ones) */ for (SquidAstVisitor<Grammar> visitor : visitors) { if (visitor instanceof CharsetAwareVisitor) { ((CharsetAwareVisitor) visitor).setCharset(conf.getCharset()); } builder.withSquidAstVisitor(visitor); } return builder.build(); }
@Override public void scanFiles(Collection<File> files) { progressReport.start(files.size()); super.scanFiles(files); progressReport.stop(); }
/** * Helper method for testing checks without having to deploy them on a Sonar instance. */ public static SourceFile scanSingleFile(File file, SquidAstVisitor<ObjectiveCGrammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException("File '" + file + "' not found."); } AstScanner<ObjectiveCGrammar> scanner = create(new ObjectiveCConfiguration(), visitors); scanner.scanFile(file); Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class)); if (sources.size() != 1) { throw new IllegalStateException("Only one SourceFile was expected whereas " + sources.size() + " has been returned."); } return (SourceFile) sources.iterator().next(); }
@Override public void analyse(Project project, SensorContext context) { this.context = context; List<CodeVisitor> astNodeVisitors = Lists.newArrayList(); List<JavaScriptFileScanner> treeVisitors = Lists.newArrayList(); for (CodeVisitor visitor : checks.all()) { if (visitor instanceof JavaScriptFileScanner) { treeVisitors.add((JavaScriptFileScanner) visitor); } else { astNodeVisitors.add(visitor); } } astNodeVisitors.add(new VisitorsBridge(treeVisitors, resourcePerspectives, fileSystem, settings)); astNodeVisitors.add(new FileLinesVisitor(fileLinesContextFactory, fileSystem, pathResolver)); scanner = JavaScriptAstScanner.create(createConfiguration(), astNodeVisitors.toArray(new SquidAstVisitor[astNodeVisitors.size()])); scanner.scanFiles(Lists.newArrayList(fileSystem.files(mainFilePredicate))); Collection<SourceCode> squidSourceFiles = scanner.getIndex().search(new QueryByType(SourceFile.class)); save(squidSourceFiles); highlight(); }
private void saveFunctionsComplexityAndDistribution(File sonarFile, SourceFile squidFile) { Collection<SourceCode> squidFunctionsInFile = scanner.getIndex().search(new QueryByParent(squidFile), new QueryByType(SourceFunction.class)); RangeDistributionBuilder complexityDistribution = new RangeDistributionBuilder(CoreMetrics.FUNCTION_COMPLEXITY_DISTRIBUTION, FUNCTIONS_DISTRIB_BOTTOM_LIMITS); double complexityInFunction = 0; for (SourceCode squidFunction : squidFunctionsInFile) { double functionComplexity = squidFunction.getDouble(EcmaScriptMetric.COMPLEXITY); complexityDistribution.add(functionComplexity); complexityInFunction += functionComplexity; } context.saveMeasure(sonarFile, complexityDistribution.build().setPersistenceMode(PersistenceMode.MEMORY)); context.saveMeasure(sonarFile, CoreMetrics.COMPLEXITY_IN_FUNCTIONS, complexityInFunction); }
final Parser<ObjectiveCGrammar> parser = ObjectiveCParser.create(conf); AstScanner.Builder<ObjectiveCGrammar> builder = AstScanner.<ObjectiveCGrammar> builder(context).setBaseParser(parser);
@Override public void scanFiles(Collection<File> files) { progressReport.start(files.size()); super.scanFiles(files); progressReport.stop(); }
/** * Helper method for testing checks without having to deploy them on a Sonar instance. */ public static SourceFile scanSingleFile(File file, SquidAstVisitor<ObjectiveCGrammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException("File '" + file + "' not found."); } AstScanner<ObjectiveCGrammar> scanner = create(new ObjectiveCConfiguration(), visitors); scanner.scanFile(file); Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class)); if (sources.size() != 1) { throw new IllegalStateException("Only one SourceFile was expected whereas " + sources.size() + " has been returned."); } return (SourceFile) sources.iterator().next(); }
public void analyse(Project project, SensorContext context) { this.project = project; this.context = context; Collection<SquidCheck> squidChecks = annotationCheckFactory.getChecks(); this.scanner = ObjectiveCAstScanner.create(createConfiguration(project), squidChecks.toArray(new SquidCheck[squidChecks.size()])); scanner.scanFiles(InputFileUtils.toFiles(project.getFileSystem().mainFiles(ObjectiveC.KEY))); Collection<SourceCode> squidSourceFiles = scanner.getIndex().search(new QueryByType(SourceFile.class)); save(squidSourceFiles); }
final Parser<ObjectiveCGrammar> parser = ObjectiveCParser.create(conf); AstScanner.Builder<ObjectiveCGrammar> builder = AstScanner.<ObjectiveCGrammar>builder(context).setBaseParser(parser);
@Override public void scanFiles(Collection<File> files) { progressReport.start(files); super.scanFiles(files); progressReport.stop(); }
/** * Helper method for testing checks without having to deploy them on a Sonar instance. */ public static SourceFile scanSingleFile(File file, SquidAstVisitor<SwiftGrammar>... visitors) { if (!file.isFile()) { throw new IllegalArgumentException("File '" + file + "' not found."); } AstScanner<SwiftGrammar> scanner = create(new SwiftConfiguration(), visitors); scanner.scanFile(file); Collection<SourceCode> sources = scanner.getIndex().search(new QueryByType(SourceFile.class)); if (sources.size() != 1) { throw new IllegalStateException("Only one SourceFile was expected whereas " + sources.size() + " has been returned."); } return (SourceFile) sources.iterator().next(); }
@Override public void execute(SensorContext sensorContext) { FilePredicate hasSwift = context.fileSystem().predicates().hasLanguage(Swift.KEY); FilePredicate isMain = context.fileSystem().predicates().hasType(InputFile.Type.MAIN); FilePredicate and = context.fileSystem().predicates().and(hasSwift, isMain); List<File> files = new ArrayList<>(); for(InputFile inf : context.fileSystem().inputFiles(and)){ files.add(inf.file()); } List<SquidAstVisitor<SwiftGrammar>> visitors = new ArrayList<>(checks.all()); scanner = SwiftAstScanner.create(createConfiguration(), visitors.toArray(new SquidAstVisitor[visitors.size()])); scanner.scanFiles(files); Collection<SourceCode> squidSourceFiles = scanner.getIndex().search(new QueryByType(SourceFile.class)); save(squidSourceFiles); } }
final Parser<SwiftGrammar> parser = SwiftParser.create(conf); AstScanner.Builder<SwiftGrammar> builder = AstScanner.builder(context).setBaseParser(parser);