|
From: <caw...@us...> - 2007-03-14 17:49:32
|
Revision: 2165
http://svn.sourceforge.net/rubyeclipse/?rev=2165&view=rev
Author: cawilliams
Date: 2007-03-14 10:49:30 -0700 (Wed, 14 Mar 2007)
Log Message:
-----------
fix some odd behavior when multiple lines of comments follow one after the other. Also handle comments at end of file
Modified Paths:
--------------
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/AbstractRubyTokenScanner.java
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/RubyTokenScanner.java
trunk/org.rubypeople.rdt.ui.tests/src/org/rubypeople/rdt/internal/ui/text/TC_RubyPartitionScanner.java
Modified: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/AbstractRubyTokenScanner.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/AbstractRubyTokenScanner.java 2007-03-14 15:45:09 UTC (rev 2164)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/AbstractRubyTokenScanner.java 2007-03-14 17:49:30 UTC (rev 2165)
@@ -153,7 +153,7 @@
}
}
- protected Token getToken(String key) {
+ public Token getToken(String key) {
if (fNeedsLazyColorLoading) resolveProxyAttributes();
return (Token) fTokenMap.get(key);
}
Modified: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/RubyTokenScanner.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/RubyTokenScanner.java 2007-03-14 15:45:09 UTC (rev 2164)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/RubyTokenScanner.java 2007-03-14 17:49:30 UTC (rev 2165)
@@ -109,8 +109,14 @@
}
List comments = result.getCommentNodes();
if (comments != null && !comments.isEmpty()) {
- CommentNode comment = (CommentNode) comments.remove(comments.size() - 1); // Grab last comment
- tokenLength = comment.getContent().length() + 1;
+ CommentNode comment;
+ while (!comments.isEmpty()) {
+ comment = (CommentNode) comments.remove(0);
+ // Grab comment and add it's length to our running tally
+ tokenLength += comment.getContent().length() + 1;
+ }
+ // FIXME What if we have two lines of comments in a row?
+// tokenLength = comment.getContent().length() + 1;
fSavedToken = returnValue;
fSavedOffset = oldOffset + tokenLength;
if (!isEOF) fSavedLength = getOffset() - fSavedOffset;
@@ -138,7 +144,7 @@
}
@Override
- protected Token getToken(String key) {
+ public Token getToken(String key) {
if (isInRegexp)
return super.getToken(IRubyColorConstants.RUBY_REGEXP);
if (isInString)
@@ -186,6 +192,10 @@
lexer.reset();
lexer.setState(LexState.EXPR_BEG);
parserSupport.initTopLocalVariables();
+ lastWasComment = false;
+ fSavedLength = -1;
+ fSavedToken = null;
+ fSavedOffset = -1;
if (offset == 0) {
isInRegexp = false;
isInString = false;
Modified: trunk/org.rubypeople.rdt.ui.tests/src/org/rubypeople/rdt/internal/ui/text/TC_RubyPartitionScanner.java
===================================================================
--- trunk/org.rubypeople.rdt.ui.tests/src/org/rubypeople/rdt/internal/ui/text/TC_RubyPartitionScanner.java 2007-03-14 15:45:09 UTC (rev 2164)
+++ trunk/org.rubypeople.rdt.ui.tests/src/org/rubypeople/rdt/internal/ui/text/TC_RubyPartitionScanner.java 2007-03-14 17:49:30 UTC (rev 2165)
@@ -29,14 +29,6 @@
assert(true);
}
- public void testPartitioningOfSingleLineComment() {
- String source = "# This is a comment\n";
-
- assertEquals(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, this.getContentType(source, 0));
- assertEquals(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, this.getContentType(source, 1));
- assertEquals(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, this.getContentType(source, 18));
- }
-
public void testRecognizeSpecialCase() {
String source = "a,b=?#,'This is not a comment!'\n";
@@ -67,90 +59,5 @@
assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 2));
assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 10));
}
-
- public void testHereDocWithSpacesOK() {
- String source = "puts <<-TEST\nMyName\n\tTEST\nputs 'ab'";
- assertEquals(RubyPartitionScanner.RUBY_STRING, this.getContentType(source, 5));
-
- source = "puts <<-TEST\nMyName\n TEST\nputs 'ab'";
- assertEquals(RubyPartitionScanner.RUBY_STRING, this.getContentType(source, 5));
-
- source = "puts <<-'ax%&'\nMyName\n ax%&";
- assertEquals(RubyPartitionScanner.RUBY_STRING, this.getContentType(source, 5));
- }
- public void testHereDocOK() {
- String source = "puts <<TEST\nMyName\nTEST";
- assertEquals(RubyPartitionScanner.RUBY_STRING, this.getContentType(source, 5));
-
- source = "puts <<-TEST\nMyName\nTEST\nputs 'ab'";
- assertEquals(RubyPartitionScanner.RUBY_STRING, this.getContentType(source, 5));
-
- source = "puts <<\"TEST\"\nMyName\nTEST";
- assertEquals(RubyPartitionScanner.RUBY_STRING, this.getContentType(source, 5));
-
- source = "puts <<'TEST'\nMyName\nTEST";
- assertEquals(RubyPartitionScanner.RUBY_STRING, this.getContentType(source, 5));
-
- source = "puts <<-'ax%&'\nMyName\nax%&";
- assertEquals(RubyPartitionScanner.RUBY_STRING, this.getContentType(source, 5));
-
- }
-
- public void testNoHereDoc() {
-
- // space after <<
- String source = "puts << 'abc'";
-
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 5));
- // normaler String
- assertEquals(RubyPartitionScanner.RUBY_STRING, this.getContentType(source, 9));
-
- // end not on first column
- source = "puts <<HERE\n HERE" ;
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 5));
-
- source = "puts <<-"; // whatever that means in ruby
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 5));
-
- // recognize keyword end although there is no matching HERE
- // this assures that there are no tokens eaten
- source = "puts <<HERE\nend\n" ;
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 14));
-
- source = "puts <<'abc'\ntest" ;
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 6));
-
- source = "puts <<'abc'\ntest\nabd" ;
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 6));
- }
-
- public void testRecognizeDivision() {
- String source = "1/3 #This is a comment\n";
-
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 0));
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 3));
- assertEquals(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, this.getContentType(source, 5));
- }
-
- public void testRecognizeOddballCharacters() {
- String source = "?\" #comment\n";
-
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 0));
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 2));
- assertEquals(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, this.getContentType(source, 5));
-
- source = "?' #comment\n";
-
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 0));
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 2));
- assertEquals(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, this.getContentType(source, 5));
-
- source = "?/ #comment\n";
-
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 0));
- assertEquals(IDocument.DEFAULT_CONTENT_TYPE, this.getContentType(source, 2));
- assertEquals(RubyPartitionScanner.RUBY_SINGLE_LINE_COMMENT, this.getContentType(source, 5));
- }
-
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|