Skip to content

Commit 6c50245

Browse files
committed
Migrate to new APIs
1 parent a6174b4 commit 6c50245

File tree

3 files changed

+79
-13
lines changed

3 files changed

+79
-13
lines changed

lib/dev-kt-v1.3-SNAPSHOT.jar

12.8 KB
Binary file not shown.

src/org/intellij/clojure/devkt/clojure-devkt.kt

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import org.intellij.clojure.devkt.lang.*
55
import org.intellij.clojure.devkt.psi.*
66
import org.intellij.clojure.devkt.psi.ClojureTypes.*
77
import org.intellij.clojure.devkt.util.*
8+
import org.jetbrains.kotlin.com.intellij.lexer.Lexer
9+
import org.jetbrains.kotlin.com.intellij.openapi.project.Project
810
import org.jetbrains.kotlin.com.intellij.psi.PsiElement
911
import org.jetbrains.kotlin.com.intellij.psi.PsiErrorElement
1012
import org.jetbrains.kotlin.com.intellij.psi.tree.IElementType
@@ -19,6 +21,10 @@ class Clojure<TextAttributes> : ExtendedDevKtLanguage<TextAttributes>(
1921
fileName.endsWith(".cljs") ||
2022
fileName.endsWith(".cljc")
2123

24+
override fun createLexer(project: Project): Lexer {
25+
return ClojureHighlightingLexer(ClojureLanguage)
26+
}
27+
2228
/**
2329
* @param type IElementType
2430
* @param colorScheme ColorScheme<TextAttributes>
@@ -41,16 +47,16 @@ class Clojure<TextAttributes> : ExtendedDevKtLanguage<TextAttributes>(
4147
C_QUOTE -> colorScheme.string
4248
C_TILDE, C_TILDE_AT -> colorScheme.operators
4349
C_AT -> colorScheme.operators
44-
// C_HAT, C_SHARP_HAT -> colorScheme.metadata
45-
// C_SHARP, C_SHARP_COMMENT, C_SHARP_EQ, C_SHARP_NS -> pack(ClojureColors.READER_MACRO)
46-
// C_SHARP_QMARK, C_SHARP_QMARK_AT, C_SHARP_QUOTE -> pack(ClojureColors.READER_MACRO)
50+
C_HAT, C_SHARP_HAT -> colorScheme.metaData
51+
C_SHARP, C_SHARP_COMMENT, C_SHARP_EQ, C_SHARP_NS -> colorScheme.macro
52+
C_SHARP_QMARK, C_SHARP_QMARK_AT, C_SHARP_QUOTE -> colorScheme.macro
4753
C_PAREN1, C_PAREN2 -> colorScheme.parentheses
4854
C_BRACE1, C_BRACE2 -> colorScheme.braces
4955
C_BRACKET1, C_BRACKET2 -> colorScheme.brackets
50-
// ClojureHighlightingLexer.CALLABLE -> pack(ClojureColors.CALLABLE)
51-
C_KEYWORD -> colorScheme.keywords
52-
// ClojureHighlightingLexer.CALLABLE_KEYWORD -> pack(ClojureColors.CALLABLE, ClojureColors.KEYWORD)
53-
// ClojureHighlightingLexer.QUOTED_SYM -> pack(ClojureColors.QUOTED_SYM)
56+
ClojureHighlightingLexer.CALLABLE -> colorScheme.keywords
57+
ClojureHighlightingLexer.KEYWORD -> colorScheme.keywords
58+
ClojureHighlightingLexer.CALLABLE_KEYWORD -> colorScheme.keywords
59+
ClojureHighlightingLexer.QUOTED_SYM -> colorScheme.string
5460
else -> null
5561
}
5662

@@ -69,11 +75,8 @@ class Clojure<TextAttributes> : ExtendedDevKtLanguage<TextAttributes>(
6975
if (callable) document.highlight(element.valueRange, colorScheme.keywords)
7076
when (element) {
7177
is PsiErrorElement -> document.highlight(element, colorScheme.unknown)
72-
is CMetadata -> {
73-
element.firstForm.let {
74-
/// if (it is CSymbol) document.highlight(it, null)
75-
// TODO metadata
76-
}
78+
is CMetadata -> element.firstForm.let {
79+
if (it is CSymbol) document.highlight(it, colorScheme.metaData)
7780
}
7881
}
7982
if (element is CForm && element.iterate(CReaderMacro::class)

src/org/intellij/clojure/devkt/lang/clojure-parser.kt

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import org.intellij.clojure.devkt.psi.ClojureTypes.*
2424
import org.intellij.clojure.devkt.util.wsOrComment
2525
import org.jetbrains.kotlin.com.intellij.lang.*
2626
import org.jetbrains.kotlin.com.intellij.lang.parser.GeneratedParserUtilBase
27-
import org.jetbrains.kotlin.com.intellij.lexer.FlexAdapter
27+
import org.jetbrains.kotlin.com.intellij.lexer.*
2828
import org.jetbrains.kotlin.com.intellij.openapi.project.Project
2929
import org.jetbrains.kotlin.com.intellij.psi.FileViewProvider
3030
import org.jetbrains.kotlin.com.intellij.psi.tree.IElementType
@@ -39,6 +39,69 @@ object ClojureParserDefinition : ClojureParserDefinitionBase() {
3939
override fun getFileNodeType() = ClojureTokens.CLJ_FILE_TYPE
4040
}
4141

42+
class ClojureHighlightingLexer(language: Language) : LookAheadLexer(ClojureLexer(language)) {
43+
companion object {
44+
val CALLABLE = IElementType("C_CALLABLE*", ClojureLanguage)
45+
val KEYWORD = IElementType("C_KEYWORD*", ClojureLanguage)
46+
val CALLABLE_KEYWORD = IElementType("C_CALLABLE_KEYWORD*", ClojureLanguage)
47+
val QUOTED_SYM = IElementType("C_QUOTED_SYM*", ClojureLanguage)
48+
}
49+
50+
override fun lookAhead(baseLexer: Lexer) {
51+
fun skipWs(l: Lexer) {
52+
while (l.tokenType.let {
53+
ClojureTokens.WHITESPACES.contains(it) ||
54+
ClojureTokens.COMMENTS.contains(it)
55+
}) advanceLexer(l)
56+
}
57+
58+
val tokenType0 = baseLexer.tokenType
59+
60+
when (tokenType0) {
61+
C_SHARP -> {
62+
baseLexer.advance()
63+
when (baseLexer.tokenType) {
64+
C_STRING, C_PAREN1, C_BRACE1 -> advanceAs(baseLexer, baseLexer.tokenType)
65+
else -> addToken(baseLexer.tokenStart, C_SHARP)
66+
}
67+
}
68+
C_QUOTE -> {
69+
advanceAs(baseLexer, tokenType0)
70+
skipWs(baseLexer)
71+
if (baseLexer.tokenType === C_SYM) advanceSymbolAs(baseLexer, QUOTED_SYM)
72+
else advanceLexer(baseLexer)
73+
}
74+
C_COLON, C_COLONCOLON -> {
75+
advanceAs(baseLexer, tokenType0)
76+
if (baseLexer.tokenType === C_SYM) {
77+
advanceAs(baseLexer, KEYWORD)
78+
if (baseLexer.tokenType === C_SLASH) advanceAs(baseLexer, KEYWORD)
79+
if (baseLexer.tokenType === C_SYM) advanceAs(baseLexer, KEYWORD)
80+
}
81+
}
82+
C_PAREN1 -> {
83+
advanceAs(baseLexer, tokenType0)
84+
skipWs(baseLexer)
85+
val callableType = if (baseLexer.tokenType.let { it == C_COLON || it == C_COLONCOLON }) CALLABLE_KEYWORD else CALLABLE
86+
advanceSymbolAs(baseLexer, callableType)
87+
}
88+
else -> super.lookAhead(baseLexer)
89+
}
90+
}
91+
92+
private fun advanceSymbolAs(baseLexer: Lexer, type: IElementType) {
93+
w@ while (true) {
94+
val tokenType = baseLexer.tokenType
95+
when (tokenType) {
96+
C_DOT, C_DOTDASH -> advanceAs(baseLexer, tokenType)
97+
C_SLASH, C_SYM -> advanceAs(baseLexer, type)
98+
C_COLON, C_COLONCOLON -> advanceAs(baseLexer, type)
99+
else -> break@w
100+
}
101+
}
102+
}
103+
}
104+
42105
abstract class ClojureParserDefinitionBase : ParserDefinition {
43106

44107
override fun createLexer(project: Project?) = ClojureLexer(fileNodeType.language)

0 commit comments

Comments
 (0)