|
From: <caw...@us...> - 2007-05-17 18:15:07
|
Revision: 2500
http://svn.sourceforge.net/rubyeclipse/?rev=2500&view=rev
Author: cawilliams
Date: 2007-05-17 11:15:04 -0700 (Thu, 17 May 2007)
Log Message:
-----------
Modified Paths:
--------------
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/parser/warnings/SimilarVariableNameVisitor.java
trunk/com.aptana.rdt.tests/src/com/aptana/rdt/internal/core/parser/warnings/TC_SimilarVariableNameVisitor.java
trunk/com.aptana.rdt.tests/src/com/aptana/rdt/internal/core/parser/warnings/WarningVisitorTest.java
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/parser/warnings/SimilarVariableNameVisitor.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/parser/warnings/SimilarVariableNameVisitor.java 2007-05-17 16:06:02 UTC (rev 2499)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/parser/warnings/SimilarVariableNameVisitor.java 2007-05-17 18:15:04 UTC (rev 2500)
@@ -7,10 +7,12 @@
import org.jruby.ast.ArgsNode;
import org.jruby.ast.BlockNode;
+import org.jruby.ast.ClassNode;
import org.jruby.ast.ClassVarAsgnNode;
import org.jruby.ast.ClassVarDeclNode;
import org.jruby.ast.ClassVarNode;
import org.jruby.ast.DefnNode;
+import org.jruby.ast.DefsNode;
import org.jruby.ast.InstAsgnNode;
import org.jruby.ast.InstVarNode;
import org.jruby.ast.ListNode;
@@ -40,10 +42,21 @@
@Override
public Instruction visitDefnNode(DefnNode iVisited) {
- enterScope();
+ enterMethod();
return super.visitDefnNode(iVisited);
}
+
+ @Override
+ public Instruction visitDefsNode(DefsNode iVisited) {
+ enterMethod();
+ return super.visitDefsNode(iVisited);
+ }
+ private void enterMethod() {
+ // TODO Auto-generated method stub
+ enterScope();
+ }
+
@Override
public Instruction visitArgsNode(ArgsNode iVisited) {
ListNode list = iVisited.getArgs();
@@ -65,7 +78,7 @@
@Override
public void exitDefnNode(DefnNode iVisited) {
- exitScope();
+ exitMethod();
super.exitDefnNode(iVisited);
}
@@ -86,6 +99,7 @@
}
private void exitScope() {
+ // FIXME Only create warnings on references to variables that have no declaration
Map<String, Node> map = stack.remove(stack.size() - 1); // pop
List<String> names = new ArrayList<String>(map.keySet());
while (!names.isEmpty()) {
@@ -235,6 +249,23 @@
}
@Override
+ public void exitClassNode(ClassNode iVisited) {
+ // TODO Check for references to class and instance variables that have no declaration/assignment
+ super.exitClassNode(iVisited);
+ }
+
+ @Override
+ public void exitDefsNode(DefsNode iVisited) {
+ exitMethod();
+ super.exitDefsNode(iVisited);
+ }
+
+ private void exitMethod() {
+ // TODO Check for references to local variables that have no declaration/assignment
+ exitScope();
+ }
+
+ @Override
public Instruction visitInstAsgnNode(InstAsgnNode iVisited) {
addVar(iVisited);
return super.visitInstAsgnNode(iVisited);
Modified: trunk/com.aptana.rdt.tests/src/com/aptana/rdt/internal/core/parser/warnings/TC_SimilarVariableNameVisitor.java
===================================================================
--- trunk/com.aptana.rdt.tests/src/com/aptana/rdt/internal/core/parser/warnings/TC_SimilarVariableNameVisitor.java 2007-05-17 16:06:02 UTC (rev 2499)
+++ trunk/com.aptana.rdt.tests/src/com/aptana/rdt/internal/core/parser/warnings/TC_SimilarVariableNameVisitor.java 2007-05-17 18:15:04 UTC (rev 2500)
@@ -1,5 +1,7 @@
package com.aptana.rdt.internal.core.parser.warnings;
+import org.rubypeople.rdt.core.RubyCore;
+import org.rubypeople.rdt.internal.core.RubyModelManager;
import org.rubypeople.rdt.internal.core.parser.warnings.RubyLintVisitor;
import com.aptana.rdt.internal.parser.warnings.SimilarVariableNameVisitor;
@@ -8,7 +10,14 @@
@Override
protected RubyLintVisitor createVisitor(String code) {
- return new SimilarVariableNameVisitor(code);
+ return new SimilarVariableNameVisitor(code){
+
+ @Override
+ protected String getSeverity() {
+ return RubyCore.WARNING;
+ }
+
+ };
}
public void testEmptyHasNoProblems() throws Exception {
@@ -128,5 +137,29 @@
parse(code);
assertEquals(1, numberOfProblems());
}
+
+ public void testDontWarnAboutDeclarationOfSimilarVariableName() throws Exception {
+ String code = "class Ralph\n" +
+ " def name\n" +
+ " @local = 1\n" +
+ " @lcal = 2\n" +
+ " end\n" +
+ "end\n";
+ parse(code);
+ assertEquals(0, numberOfProblems());
+ }
+
+ public void testHandleScoping() throws Exception {
+ String code = "class Ralph\n" +
+ " def initialize(name)\n" +
+ " @name = name\n" +
+ " end\n" +
+ " def name\n" +
+ " @namee\n" +
+ " end\n" +
+ "end\n";
+ parse(code);
+ assertEquals(1, numberOfProblems());
+ }
}
Modified: trunk/com.aptana.rdt.tests/src/com/aptana/rdt/internal/core/parser/warnings/WarningVisitorTest.java
===================================================================
--- trunk/com.aptana.rdt.tests/src/com/aptana/rdt/internal/core/parser/warnings/WarningVisitorTest.java 2007-05-17 16:06:02 UTC (rev 2499)
+++ trunk/com.aptana.rdt.tests/src/com/aptana/rdt/internal/core/parser/warnings/WarningVisitorTest.java 2007-05-17 18:15:04 UTC (rev 2500)
@@ -13,13 +13,12 @@
public abstract class WarningVisitorTest extends TestCase {
- private MockProblemRequestor problemRequestor;
private RubyParser parser;
+ private DelegatingVisitor visitor;
@Override
protected void setUp() throws Exception {
- super.setUp();
- problemRequestor = new MockProblemRequestor();
+ super.setUp();
parser = new RubyParser();
}
@@ -27,16 +26,16 @@
Node root = parser.parse(code);
List<RubyLintVisitor> visitors = new ArrayList<RubyLintVisitor>();
visitors.add(createVisitor(code));
- DelegatingVisitor visitor = new DelegatingVisitor(visitors);
+ visitor = new DelegatingVisitor(visitors);
root.accept(visitor);
}
public int numberOfProblems() {
- return problemRequestor.numberOfProblems();
+ return visitor.getProblems().size();
}
protected IProblem getProblemAtLine(int i) {
- return problemRequestor.getProblemAtLine(i);
+ return visitor.getProblems().get(i);
}
abstract protected RubyLintVisitor createVisitor(String code);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|