Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@
</dependencies>

<properties>
<sonar.version>2.7</sonar.version>
<sonar.version>3.4.1</sonar.version>
<sonar.pluginClass>com.pica.sonarplugins.ruby.RubyPlugin</sonar.pluginClass>
<sonar.runtimeVersion>2.7</sonar.runtimeVersion>
<sonar.runtimeVersion>3.4.1</sonar.runtimeVersion>
<sonar.pluginName>Ruby</sonar.pluginName>
</properties>

Expand Down
67 changes: 67 additions & 0 deletions src/main/java/com/centralway/rubymetrics/FlogSensor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.centralway.rubymetrics;

import com.pica.sonarplugins.ruby.core.RubyFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.batch.Sensor;
import org.sonar.api.batch.SensorContext;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.resources.Project;
import org.sonar.api.resources.ProjectFileSystem;
import org.sonar.api.resources.File;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import org.apache.commons.lang.StringUtils;

import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.io.IOException;
import java.util.Map;


/**
*
* @author martin.naumann
*/
public class FlogSensor implements Sensor {

private static final Logger LOG = LoggerFactory.getLogger(FlogSensor.class);

public boolean shouldExecuteOnProject(Project project) {
return true;
}

public void analyse(Project project, SensorContext context) {
try {
processReport(project, context);
} catch(IOException e) {
LOG.error("Flog report could not be parsed properly!");
LOG.error(e.getMessage());
}
}

private void processReport(Project project, SensorContext context) throws IOException {
LineIterator lineIter = FileUtils.lineIterator(new java.io.File("flog.txt"));

context.saveMeasure(project, CoreMetrics.FUNCTION_COMPLEXITY, getAverageScorePerMethod(lineIter));
}

private double getAverageScorePerMethod(LineIterator lineIter) {
lineIter.nextLine(); // Skip the total score
Double averagePerMethod = Double.parseDouble(lineIter.nextLine().split(":")[0]);
lineIter.nextLine(); //There is an empty line that we wanna skip.
return averagePerMethod;
}

@Override
public String toString() {
return "Ruby Flog report sensor";
}
}
4 changes: 3 additions & 1 deletion src/main/java/com/pica/sonarplugins/ruby/RubyPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.pica.sonarplugins.ruby.core.RubySourceCodeColorizer;
import com.pica.sonarplugins.ruby.core.RubySourceImporter;
import com.pica.sonarplugins.ruby.rcov.RcovSensor;
import com.centralway.rubymetrics.FlogSensor;
import org.sonar.api.Plugin;
import org.sonar.api.Properties;

Expand Down Expand Up @@ -32,7 +33,8 @@ public List getExtensions() {
RubySensor.class,
RubySourceImporter.class,
RubySourceCodeColorizer.class,
RcovSensor.class
RcovSensor.class,
FlogSensor.class
);
}

Expand Down