|
From: Christopher W. <caw...@us...> - 2006-05-17 02:41:12
|
Update of /cvsroot/rubyeclipse/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/builder In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv24172/src/org/rubypeople/rdt/internal/core/builder Modified Files: RubyCodeAnalyzer.java Added Files: ProblemRequestorMarkerManager.java Log Message: Add support for a Ruby "Lint" like AST visitor which will create semantic analysis and warnings ala JDT Index: RubyCodeAnalyzer.java =================================================================== RCS file: /cvsroot/rubyeclipse/org.rubypeople.rdt.core/src/org/rubypeople/rdt/internal/core/builder/RubyCodeAnalyzer.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** RubyCodeAnalyzer.java 13 Nov 2005 13:05:12 -0000 1.2 --- RubyCodeAnalyzer.java 17 May 2006 02:41:07 -0000 1.3 *************** *** 22,25 **** --- 22,26 ---- import org.rubypeople.rdt.core.RubyCore; import org.rubypeople.rdt.internal.core.parser.ImmediateWarnings; + import org.rubypeople.rdt.internal.core.parser.RubyLintVisitor; import org.rubypeople.rdt.internal.core.parser.RubyParser; *************** *** 41,46 **** --- 42,50 ---- public void compileFile(IFile file) throws CoreException { Reader reader = new InputStreamReader(file.getContents()); + markerManager.removeProblemsAndTasksFor(file); try { Node rootNode = parser.parse(file, reader); + RubyLintVisitor visitor = new RubyLintVisitor(new ProblemRequestorMarkerManager(file, markerManager)); + rootNode.accept(visitor); indexUpdater.update(file, rootNode, true); } catch (SyntaxException e) { --- NEW FILE: ProblemRequestorMarkerManager.java --- package org.rubypeople.rdt.internal.core.builder; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.jruby.lexer.yacc.SyntaxException; import org.rubypeople.rdt.core.IProblemRequestor; import org.rubypeople.rdt.core.parser.IProblem; import org.rubypeople.rdt.internal.core.parser.RdtPosition; import com.sun.jmx.snmp.tasks.Task; public class ProblemRequestorMarkerManager implements IProblemRequestor { private IMarkerManager markerManager; private boolean active = false; private IFile file; public ProblemRequestorMarkerManager(IFile file, IMarkerManager markerManager) { this.markerManager = markerManager; this.file = file; } public void acceptProblem(IProblem problem) { // TODO Bl;ah blah blah // if (!isActive()) return; if (problem.isWarning()) { markerManager.addWarning(file, problem.getMessage()); return; } if (problem.isError()) { markerManager.createSyntaxError(file, new SyntaxException( new RdtPosition(problem.getSourceLineNumber(), problem .getSourceStart(), problem.getSourceEnd()), problem .getMessage())); return; } if (problem.isTask()) { List tasks = new ArrayList(); Task task = (Task) problem; tasks.add(task); try { markerManager.createTasks(file, tasks); } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } return; } } public void beginReporting() { active = true; } public void endReporting() { active = false; } public boolean isActive() { // TODO Auto-generated method stub return active; } } |