Last active
December 24, 2015 04:49
-
-
Save shyiko/6746525 to your computer and use it in GitHub Desktop.
(WebStorm 7.0) TODO highlighting fix for CoffeeScript plugin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -rupN --exclude=.DS_Store original/src/main/java/org/coffeescript/index/CoffeeScriptIndexPatternBuilder.java src/main/java/org/coffeescript/index/CoffeeScriptIndexPatternBuilder.java | |
--- original/src/main/java/org/coffeescript/index/CoffeeScriptIndexPatternBuilder.java 1970-01-01 03:00:00.000000000 +0300 | |
+++ src/main/java/org/coffeescript/index/CoffeeScriptIndexPatternBuilder.java 2013-09-28 23:18:30.000000000 +0300 | |
@@ -0,0 +1,41 @@ | |
+package org.coffeescript.index; | |
+ | |
+import com.intellij.lexer.Lexer; | |
+import com.intellij.psi.PsiFile; | |
+import com.intellij.psi.impl.search.IndexPatternBuilder; | |
+import com.intellij.psi.tree.IElementType; | |
+import com.intellij.psi.tree.TokenSet; | |
+import org.coffeescript.lang.lexer.CoffeeScriptFlexLexer; | |
+import org.coffeescript.lang.lexer.CoffeeScriptTokenTypes; | |
+import org.coffeescript.lang.psi.CoffeeScriptFile; | |
+ | |
+public class CoffeeScriptIndexPatternBuilder implements IndexPatternBuilder { | |
+ | |
+ static final TokenSet COMMENTS_FOR_INDEXING = TokenSet.orSet( | |
+ TokenSet.create(CoffeeScriptTokenTypes.LINE_COMMENT), | |
+ TokenSet.create(CoffeeScriptTokenTypes.BLOCK_COMMENT) | |
+ ); | |
+ | |
+ public Lexer getIndexingLexer(PsiFile file) { | |
+ if ((file instanceof CoffeeScriptFile)) { | |
+ return new CoffeeScriptFlexLexer(); | |
+ } | |
+ return null; | |
+ } | |
+ | |
+ public TokenSet getCommentTokenSet(PsiFile file) { | |
+ if ((file instanceof CoffeeScriptFile)) { | |
+ return COMMENTS_FOR_INDEXING; | |
+ } | |
+ return null; | |
+ } | |
+ | |
+ public int getCommentStartDelta(IElementType tokenType) { | |
+ return 0; | |
+ } | |
+ | |
+ public int getCommentEndDelta(IElementType tokenType) { | |
+ return 0; // fixme: return tokenType == CoffeeScriptTokenTypes.C_STYLE_COMMENT ? "###".length() : 0; | |
+ } | |
+ | |
+} | |
diff -rupN --exclude=.DS_Store original/src/main/java/org/coffeescript/index/CoffeeScriptTodoIndexer.java src/main/java/org/coffeescript/index/CoffeeScriptTodoIndexer.java | |
--- original/src/main/java/org/coffeescript/index/CoffeeScriptTodoIndexer.java 1970-01-01 03:00:00.000000000 +0300 | |
+++ src/main/java/org/coffeescript/index/CoffeeScriptTodoIndexer.java 2013-09-28 23:18:30.000000000 +0300 | |
@@ -0,0 +1,26 @@ | |
+package org.coffeescript.index; | |
+ | |
+import com.intellij.lexer.Lexer; | |
+import com.intellij.psi.impl.cache.impl.BaseFilterLexer; | |
+import com.intellij.psi.impl.cache.impl.OccurrenceConsumer; | |
+import com.intellij.psi.impl.cache.impl.todo.LexerBasedTodoIndexer; | |
+import com.intellij.psi.tree.IElementType; | |
+import org.coffeescript.lang.lexer.CoffeeScriptFlexLexer; | |
+ | |
+public class CoffeeScriptTodoIndexer extends LexerBasedTodoIndexer { | |
+ | |
+ public Lexer createLexer(OccurrenceConsumer consumer) { | |
+ return new BaseFilterLexer(new CoffeeScriptFlexLexer(), consumer) { | |
+ | |
+ public void advance() { | |
+ IElementType tokenType = this.myDelegate.getTokenType(); | |
+ if (CoffeeScriptIndexPatternBuilder.COMMENTS_FOR_INDEXING.contains(tokenType)) { | |
+ scanWordsInToken(2, false, false); | |
+ advanceTodoItemCountsInToken(); | |
+ } | |
+ this.myDelegate.advance(); | |
+ } | |
+ }; | |
+ } | |
+ | |
+} | |
diff -rupN --exclude=.DS_Store original/src/main/resources/META-INF/plugin.xml src/main/resources/META-INF/plugin.xml | |
--- original/src/main/resources/META-INF/plugin.xml 2013-09-26 13:53:44.000000000 +0300 | |
+++ src/main/resources/META-INF/plugin.xml 2013-09-28 21:12:07.000000000 +0300 | |
@@ -35,6 +35,9 @@ | |
<lang.syntaxHighlighterFactory key="CoffeeScript" | |
implementationClass="org.coffeescript.highlighter.CoffeeScriptHighlighterFactory"/> | |
+ <todoIndexer filetype="JavaScript" implementationClass="org.coffeescript.index.CoffeeScriptTodoIndexer"/> | |
+ <indexPatternBuilder implementation="org.coffeescript.index.CoffeeScriptIndexPatternBuilder"/> | |
+ | |
<highlightErrorFilter implementation="org.coffeescript.highlighter.CoffeeScriptErrorFilter"/> | |
<problemFileHighlightFilter implementation="org.coffeescript.highlighter.CoffeeProblemFileHighlightFilter"/> | |
<lang.parserDefinition language="CoffeeScript" |
In order to properly highlight ### todo: something ###
(as a single line) CoffeeScriptIndexPatternBuilder.getCommentEndDelta needs to be changed (see fixme note). Also, highlighting inside embedded HTML/JS snippets has not been tested.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
6746525-gradle-based-project.zip usage
./gradlew
(creates patched version of coffeescript.jar under build/libs)./gradlew patchCoffeScriptPlugin
(revert with./gradlew revertCoffeScriptPluginPatch
)