|
From: <caw...@us...> - 2007-07-11 16:52:49
|
Revision: 2748
http://svn.sourceforge.net/rubyeclipse/?rev=2748&view=rev
Author: cawilliams
Date: 2007-07-11 09:52:44 -0700 (Wed, 11 Jul 2007)
Log Message:
-----------
improve test, fix tertiary conditional with no spaces
Modified Paths:
--------------
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/ruby/TC_RubyTokenScanner.java
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-07-11 16:08:23 UTC (rev 2747)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/text/ruby/RubyTokenScanner.java 2007-07-11 16:52:44 UTC (rev 2748)
@@ -44,15 +44,17 @@
private RubyYaccLexer lexer;
private LexerSource lexerSource;
private ParserSupport parserSupport;
- private int tokenLength;
- private int oldOffset;
+
+ private int fTokenLength;
+ private int fOffset;
+
private boolean isInRegexp;
private boolean isInSymbol;
private boolean inAlias;
private RubyParserResult result;
private int origOffset;
private int origLength;
- private String contents;
+ private String fContents;
public RubyTokenScanner(IColorManager manager, IPreferenceStore store) {
super(manager, store);
@@ -67,16 +69,16 @@
}
public int getTokenLength() {
- return tokenLength;
+ return fTokenLength;
}
public int getTokenOffset() {
- return oldOffset;
+ return fOffset;
}
public IToken nextToken() {
- oldOffset = getOffset();
- tokenLength = 0;
+ fOffset = getOffset();
+ fTokenLength = 0;
IToken returnValue = getToken(IRubyColorConstants.RUBY_DEFAULT);
boolean isEOF = false;
try {
@@ -84,22 +86,22 @@
if (isEOF) {
returnValue = Token.EOF;
} else {
+ fTokenLength = getOffset() - fOffset;
returnValue = token(lexer.token());
}
} catch (SyntaxException se) {
if (lexerSource.getOffset() - origLength == 0)
return Token.EOF; // return eof if we hit a problem found at
// end of parsing
- tokenLength = getOffset() - oldOffset;
+ fTokenLength = getOffset() - fOffset;
return getToken(IRubyColorConstants.RUBY_ERROR);
} catch (NumberFormatException nfe) {
- tokenLength = getOffset() - oldOffset;
+ fTokenLength = getOffset() - fOffset;
return returnValue;
} catch (IOException e) {
RubyPlugin.log(e);
}
- if (!isEOF)
- tokenLength = getOffset() - oldOffset;
+
return returnValue;
}
@@ -109,10 +111,10 @@
private Token doGetToken(String key) {
if (isInSymbol)
- return super.getToken(IRubyColorConstants.RUBY_SYMBOL);
+ return getToken(IRubyColorConstants.RUBY_SYMBOL);
if (isInRegexp)
- return super.getToken(IRubyColorConstants.RUBY_REGEXP);
- return super.getToken(key);
+ return getToken(IRubyColorConstants.RUBY_REGEXP);
+ return getToken(key);
}
private IToken token(int i) {
@@ -137,7 +139,10 @@
if (isKeyword(i))
return doGetToken(IRubyColorConstants.RUBY_KEYWORD);
switch (i) {
- case Tokens.tSYMBEG:
+ case Tokens.tSYMBEG:
+ if (looksLikeTertiaryConditionalWithNoSpaces()) {
+ return doGetToken(IRubyColorConstants.RUBY_DEFAULT);
+ }
isInSymbol = true;
return doGetToken(IRubyColorConstants.RUBY_SYMBOL);
case Tokens.tGVAR:
@@ -148,7 +153,7 @@
case Tokens.tFLOAT:
case Tokens.tINTEGER:
// A character is marked as an integer, lets check for that special case...
- if ((((oldOffset - origOffset) + 1) < contents.length()) && (contents.charAt((oldOffset - origOffset) + 1) == '?'))
+ if ((((fOffset - origOffset) + 1) < fContents.length()) && (fContents.charAt((fOffset - origOffset) + 1) == '?'))
return doGetToken(IRubyColorConstants.RUBY_CHARACTER);
return doGetToken(IRubyColorConstants.RUBY_FIXNUM);
case Tokens.tREGEXP_BEG:
@@ -162,6 +167,12 @@
}
}
+ private boolean looksLikeTertiaryConditionalWithNoSpaces() {
+ if (fTokenLength > 1) return false;
+ char c = fContents.charAt((fOffset - origOffset) - 1);
+ return !Character.isWhitespace(c) && Character.isUnicodeIdentifierPart(c);
+ }
+
private boolean shouldReturnDefault(int i) {
switch (i) {
case NEWLINE:
@@ -221,8 +232,8 @@
isInRegexp = false;
}
try {
- contents = document.get(offset, length);
- lexerSource = new LexerSource("filename", new StringReader(contents), 0, true);
+ fContents = document.get(offset, length);
+ lexerSource = new LexerSource("filename", new StringReader(fContents), 0, true);
lexer.setSource(lexerSource);
} catch (BadLocationException e) {
lexerSource = new LexerSource("filename", new StringReader(""), 0, true);
Modified: trunk/org.rubypeople.rdt.ui.tests/src/org/rubypeople/rdt/internal/ui/text/ruby/TC_RubyTokenScanner.java
===================================================================
--- trunk/org.rubypeople.rdt.ui.tests/src/org/rubypeople/rdt/internal/ui/text/ruby/TC_RubyTokenScanner.java 2007-07-11 16:08:23 UTC (rev 2747)
+++ trunk/org.rubypeople.rdt.ui.tests/src/org/rubypeople/rdt/internal/ui/text/ruby/TC_RubyTokenScanner.java 2007-07-11 16:52:44 UTC (rev 2748)
@@ -4,6 +4,7 @@
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.Token;
import org.rubypeople.rdt.internal.ui.RubyPlugin;
import org.rubypeople.rdt.internal.ui.text.IRubyColorConstants;
import org.rubypeople.rdt.internal.ui.text.RubyColorManager;
@@ -16,7 +17,14 @@
protected void setUp() throws Exception {
super.setUp();
RubyColorManager colorManager = new RubyColorManager(false);
- fScanner = new RubyTokenScanner(colorManager, RubyPlugin.getDefault().getPreferenceStore());
+ fScanner = new RubyTokenScanner(colorManager, RubyPlugin.getDefault().getPreferenceStore()) {
+
+ @Override
+ public Token getToken(String key) {
+ return new Token(key);
+ }
+
+ };
}
private void setUpScanner(String code) {
@@ -32,7 +40,7 @@
IToken token = fScanner.nextToken();
assertEquals("Offsets don't match", offset, fScanner.getTokenOffset());
assertEquals("Lengths don't match", length, fScanner.getTokenLength());
- assertEquals("Colors don't match", fScanner.getToken(color), token); // call getToken so we bypass the scanner's overriding in doGetToken
+ assertEquals("Colors don't match", color, token.getData()); // call getToken so we bypass the scanner's overriding in doGetToken
}
public void testSimpleClassDefinition() {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|