Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/braced-bug' into braced-bug
Browse files Browse the repository at this point in the history
  • Loading branch information
sblundy committed Aug 11, 2019
2 parents 458cbed + da5feea commit ae6478c
Show file tree
Hide file tree
Showing 14 changed files with 135 additions and 33 deletions.
4 changes: 2 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.jetbrains.intellij") version "0.4.9"
java
kotlin("jvm") version "1.3.21"
kotlin("jvm") version "1.3.41"
id("org.jetbrains.grammarkit") version "2019.2"
}

group = "com.github.sblundy"
version = "1.0-SNAPSHOT"
version = "1.0-beta-2"

repositories {
mavenCentral()
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions src/main/grammars/Elvish.bnf
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
generate = [java="8"]
parserClass="com.github.sblundy.elvish.lang.ElvishParser"
parserUtilClass="com.github.sblundy.elvish.lang.ElvishParserUtils"
parserImports = [
Expand Down Expand Up @@ -56,6 +57,8 @@
KEYWORD_USE="use"
CONTINUATION="regexp:[\\][\r|\n]"
]

generateTokenAccessors(".*Capture")=true
}
script ::= Chunk
Chunk ::= ChuckSep* ( Pipeline ChuckSep* )*
Expand Down
43 changes: 33 additions & 10 deletions src/main/kotlin/com/github/sblundy/elvish/ElvishAnnotator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.github.sblundy.elvish

import com.github.sblundy.elvish.ElvishSyntaxHighlighter.Companion.BUILTIN
import com.github.sblundy.elvish.ElvishSyntaxHighlighter.Companion.COMMAND
import com.github.sblundy.elvish.ElvishSyntaxHighlighter.Companion.COMMAND_CAPTURE
import com.github.sblundy.elvish.ElvishSyntaxHighlighter.Companion.PARAMETER
import com.github.sblundy.elvish.ElvishSyntaxHighlighter.Companion.VARIABLE
import com.github.sblundy.elvish.ElvishSyntaxHighlighter.Companion.VARIABLE_REF
Expand All @@ -12,17 +13,39 @@ import com.intellij.psi.PsiElement

class ElvishAnnotator : Annotator {
override fun annotate(element: PsiElement, holder: AnnotationHolder) {
val attributes = when (element) {
is ElvishHead -> if (isBuiltin(element)) { BUILTIN } else { COMMAND }
is ElvishVariable -> VARIABLE
is ElvishVariableRef -> VARIABLE_REF
is ElvishParameter -> PARAMETER
else -> null
}
when (element) {
is ElvishOutputCapture -> {
val openParan = holder.createInfoAnnotation(element.openParan.textRange, null)
val closeParan = holder.createInfoAnnotation(element.closeParan.textRange, null)
openParan.textAttributes = COMMAND_CAPTURE
closeParan.textAttributes = COMMAND_CAPTURE
return
}
is ElvishExceptionCapture -> {
val openParan = holder.createInfoAnnotation(element.question.textRange.union(element.openParan.textRange), null)
val closeParan = holder.createInfoAnnotation(element.closeParan.textRange, null)
openParan.textAttributes = COMMAND_CAPTURE
closeParan.textAttributes = COMMAND_CAPTURE
return
}
else -> {
val attributes = when (element) {
is ElvishHead -> if (isBuiltin(element)) {
BUILTIN
} else {
COMMAND
}
is ElvishVariable -> VARIABLE
is ElvishVariableRef -> VARIABLE_REF
is ElvishParameter -> PARAMETER
else -> null
}

attributes?.let {
val annotation = holder.createInfoAnnotation(element.textRange, null)
annotation.textAttributes = attributes
attributes?.let {
val annotation = holder.createInfoAnnotation(element.textRange, null)
annotation.textAttributes = attributes
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ private val additionalHighlightingTag = Collections.unmodifiableMap(
mutableMapOf(
"builtIn" to ElvishSyntaxHighlighter.BUILTIN,
"command" to ElvishSyntaxHighlighter.COMMAND,
"commandCapture" to ElvishSyntaxHighlighter.COMMAND_CAPTURE,
"parameter" to ElvishSyntaxHighlighter.PARAMETER,
"variable" to ElvishSyntaxHighlighter.VARIABLE,
"variableRef" to ElvishSyntaxHighlighter.VARIABLE_REF
Expand All @@ -33,12 +34,15 @@ private val additionalHighlightingTag = Collections.unmodifiableMap(

private val elvishAttributesDescriptors = arrayOf(
AttributesDescriptor(ElvishBundle.message("attribute.COMMAND.displayName"), ElvishSyntaxHighlighter.COMMAND),
AttributesDescriptor(ElvishBundle.message("attribute.COMMAND_CAPTURE.displayName"), ElvishSyntaxHighlighter.COMMAND_CAPTURE),
AttributesDescriptor(ElvishBundle.message("attribute.KEYWORD.displayName"), ElvishSyntaxHighlighter.KEYWORD),
AttributesDescriptor(ElvishBundle.message("attribute.SEP_KEYWORD.displayName"), ElvishSyntaxHighlighter.SEP_KEYWORD),
AttributesDescriptor(ElvishBundle.message("attribute.BUILTIN.displayName"), ElvishSyntaxHighlighter.BUILTIN),
AttributesDescriptor(ElvishBundle.message("attribute.STRING.displayName"), ElvishSyntaxHighlighter.STRING),
AttributesDescriptor(ElvishBundle.message("attribute.BRACKETS.displayName"), ElvishSyntaxHighlighter.BRACKETS),
AttributesDescriptor(ElvishBundle.message("attribute.BRACES.displayName"), ElvishSyntaxHighlighter.BRACES),
AttributesDescriptor(ElvishBundle.message("attribute.PARENTHESES.displayName"), ElvishSyntaxHighlighter.PARENTHESES),
AttributesDescriptor(ElvishBundle.message("attribute.OPERATOR.displayName"), ElvishSyntaxHighlighter.OPERATOR),
AttributesDescriptor(ElvishBundle.message("attribute.PARAMETER.displayName"), ElvishSyntaxHighlighter.PARAMETER),
AttributesDescriptor(ElvishBundle.message("attribute.ESCAPE_SEQUENCE.displayName"), ElvishSyntaxHighlighter.ESCAPE_SEQUENCE),
AttributesDescriptor(ElvishBundle.message("attribute.INVALID_ESCAPE_SEQUENCE.displayName"), ElvishSyntaxHighlighter.INVALID_ESCAPE_SEQUENCE),
Expand All @@ -52,8 +56,10 @@ private val sampleElvishScript: String = """
<command>command</command> -f argument 'single quoted string'
<variable>x</variable> = '''s'
<builtIn>put</builtIn> <variableRef>${'$'}x</variableRef>
if (<builtIn>has-suffix</builtIn> <variableRef>${'$'}fname</variableRef> .go) {
<builtIn>echo</builtIn> <variableRef>${'$'}fname</variableRef> "is go f\ile"
if <commandCapture>(</commandCapture><builtIn>has-suffix</builtIn> <variableRef>${'$'}fname</variableRef> .go<commandCapture>)</commandCapture> {
<builtIn>echo</builtIn> "Package name is "<commandCapture>(</commandCapture><command>head</command> -n 1 <variableRef>${'$'}fname</variableRef> | <command>cut</command> -c 9-<commandCapture>)</commandCapture>
} else {
<builtIn>echo</builtIn> <variableRef>${'$'}fname</variableRef> "is not go f\ile"
}
y = [<parameter>x</parameter> <parameter>@y</parameter>]{ echo ${'$'}x }
<variable>y</variable> = [<parameter>x</parameter> <parameter>@y</parameter>]{ <builtIn>echo</builtIn> <variableRef>${'$'}x</variableRef> }
""".trimIndent()
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,20 @@ class ElvishSyntaxHighlighter : SyntaxHighlighterBase() {
ElvishTypes.ESCAPED_QUOTED_TEXT -> ESCAPED_STRING_KEYS
ElvishTypes.INVALID_ESCAPED_QUOTED_TEXT -> INVALID_ESCAPE_SEQUENCE_KEYS
ElvishTypes.KEYWORD_DEL,
ElvishTypes.KEYWORD_ELIF,
ElvishTypes.KEYWORD_ELSE,
ElvishTypes.KEYWORD_EXCEPT,
ElvishTypes.KEYWORD_FINALLY,
ElvishTypes.KEYWORD_FN,
ElvishTypes.KEYWORD_FOR,
ElvishTypes.KEYWORD_IF,
ElvishTypes.KEYWORD_TRY,
ElvishTypes.KEYWORD_USE,
ElvishTypes.KEYWORD_WHILE -> KEYWORD_KEYS
ElvishTypes.KEYWORD_ELIF,
ElvishTypes.KEYWORD_ELSE,
ElvishTypes.KEYWORD_EXCEPT,
ElvishTypes.KEYWORD_FINALLY -> SEP_KEYWORD_KEYS
ElvishTypes.OPEN_BRACKET, ElvishTypes.CLOSE_BRACKET -> BRACKETS_KEYS
ElvishTypes.OPEN_BRACE, ElvishTypes.CLOSE_BRACE -> BRACES_KEYS
ElvishTypes.OPEN_PARAN, ElvishTypes.CLOSE_PARAN -> PARENTHESES_KEYS
ElvishTypes.PIPE, ElvishTypes.REDIR -> OPERATOR_KEYS
ElvishTypes.HEAD -> COMMAND_KEYS
TokenType.BAD_CHARACTER -> BAD_CHAR_KEYS
else -> {
Expand All @@ -49,19 +50,22 @@ class ElvishSyntaxHighlighter : SyntaxHighlighterBase() {
override fun getHighlightingLexer(): Lexer = ElvishLexerAdapter()

companion object {
val COMMAND = createTextAttributesKey("ELVISH_COMMAND", DefaultLanguageHighlighterColors.FUNCTION_CALL)
val BUILTIN = createTextAttributesKey("ELVISH_BUILTIN", DefaultLanguageHighlighterColors.PREDEFINED_SYMBOL)
val COMMAND = createTextAttributesKey("ELVISH_COMMAND", DefaultLanguageHighlighterColors.IDENTIFIER)
val BUILTIN = createTextAttributesKey("ELVISH_BUILTIN", COMMAND)
val STRING = createTextAttributesKey("ELVISH_STRING", DefaultLanguageHighlighterColors.STRING)
val KEYWORD = createTextAttributesKey("ELVISH_KEYWORD", DefaultLanguageHighlighterColors.KEYWORD)
val SEP_KEYWORD = createTextAttributesKey("ELVISH_SEP_KEYWORD", KEYWORD)
val BRACKETS = createTextAttributesKey("ELVISH_BRACKETS", DefaultLanguageHighlighterColors.BRACKETS)
val BRACES = createTextAttributesKey("ELVISH_BRACES", DefaultLanguageHighlighterColors.BRACKETS)
val PARENTHESES = createTextAttributesKey("ELVISH_PARENTHESES", DefaultLanguageHighlighterColors.PARENTHESES)
var PARAMETER = createTextAttributesKey("ELVISH_PARAMETER", DefaultLanguageHighlighterColors.PARAMETER)
val PARAMETER = createTextAttributesKey("ELVISH_PARAMETER", DefaultLanguageHighlighterColors.PARAMETER)
val OPERATOR = createTextAttributesKey("ELVISH_REDIRECTION", DefaultLanguageHighlighterColors.OPERATION_SIGN)
val COMMAND_CAPTURE = createTextAttributesKey("ELVISH_COMMAND_CAPTURE", OPERATOR)
val ESCAPE_SEQUENCE = createTextAttributesKey("ELVISH_ESCAPE_SEQUENCE", DefaultLanguageHighlighterColors.VALID_STRING_ESCAPE)
val INVALID_ESCAPE_SEQUENCE = createTextAttributesKey("ELVISH_INVALID_ESCAPE_SEQUENCE", DefaultLanguageHighlighterColors.INVALID_STRING_ESCAPE)
val COMMENT = createTextAttributesKey("ELVISH_COMMENT", DefaultLanguageHighlighterColors.LINE_COMMENT)
val VARIABLE = createTextAttributesKey("ELVISH_VARIABLE", DefaultLanguageHighlighterColors.GLOBAL_VARIABLE)
val VARIABLE_REF = createTextAttributesKey("ELVISH_VARIABLE_REF", DefaultLanguageHighlighterColors.GLOBAL_VARIABLE)
val VARIABLE = createTextAttributesKey("ELVISH_VARIABLE", VARIABLE_REF)
val BAD_CHARACTER = createTextAttributesKey("ELVISH_BAD_CHARACTER", HighlighterColors.BAD_CHARACTER)

private val BAD_CHAR_KEYS = arrayOf(BAD_CHARACTER)
Expand All @@ -70,9 +74,11 @@ class ElvishSyntaxHighlighter : SyntaxHighlighterBase() {
private val ESCAPED_STRING_KEYS = arrayOf(ESCAPE_SEQUENCE)
private val INVALID_ESCAPE_SEQUENCE_KEYS = arrayOf(INVALID_ESCAPE_SEQUENCE)
private val KEYWORD_KEYS = arrayOf(KEYWORD)
private val SEP_KEYWORD_KEYS = arrayOf(SEP_KEYWORD)
private val BRACKETS_KEYS = arrayOf(BRACKETS)
private val BRACES_KEYS = arrayOf(BRACES)
private val PARENTHESES_KEYS = arrayOf(PARENTHESES)
private val OPERATOR_KEYS = arrayOf(OPERATOR)
private val COMMENT_KEYS = arrayOf(COMMENT)
private val EMPTY_KEYS = emptyArray<TextAttributesKey>()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package com.github.sblundy.elvish

import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.fileTypes.SingleLazyInstanceSyntaxHighlighterFactory

class ElvishSyntaxHighlighterFactory: SyntaxHighlighterFactory() {
override fun getSyntaxHighlighter(project: Project?, virtualFile: VirtualFile?) = ElvishSyntaxHighlighter()
class ElvishSyntaxHighlighterFactory: SingleLazyInstanceSyntaxHighlighterFactory() {
override fun createHighlighter() = ElvishSyntaxHighlighter()
}
2 changes: 2 additions & 0 deletions src/main/resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
<colorSettingsPage implementation="com.github.sblundy.elvish.ElvishColorSettingsPage"/>
<lang.braceMatcher language="Elvish" implementationClass="com.github.sblundy.elvish.ElvishPairBraceMatcher"/>
<lang.psiStructureViewFactory language="Elvish" implementationClass="com.github.sblundy.elvish.ElvishStructureViewFactory"/>
<additionalTextAttributes scheme="Default" file="colors/ElvishDefault.xml"/>
<additionalTextAttributes scheme="Darcula" file="colors/ElvishDarcula.xml"/>
</extensions>

<actions>
Expand Down
8 changes: 8 additions & 0 deletions src/main/resources/colors/ElvishDarcula.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version='1.0'?>
<list>
<option name="ELVISH_COMMAND">
<value>
<option name="FOREGROUND" value="c57633"/>
</value>
</option>
</list>
8 changes: 8 additions & 0 deletions src/main/resources/colors/ElvishDefault.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version='1.0'?>
<list>
<option name="ELVISH_COMMAND">
<value>
<option name="FOREGROUND" value="0073bf"/>
</value>
</option>
</list>
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
attribute.COMMAND.displayName=Command
attribute.COMMAND.displayName=Commands//Command
attribute.COMMAND_CAPTURE.displayName=Commands//Command Capture
attribute.KEYWORD.displayName=Keyword
attribute.BUILTIN.displayName=Built In
attribute.STRING.displayName=String
attribute.SEP_KEYWORD.displayName=Separator Keyword
attribute.OPERATOR.displayName=Commands//Redirection
attribute.BUILTIN.displayName=Commands//Built In
attribute.STRING.displayName=Strings//String
attribute.BRACKETS.displayName=Bracket
attribute.BRACES.displayName=Brace
attribute.PARENTHESES.displayName=Parenthesis
attribute.PARAMETER.displayName=Parameter
attribute.ESCAPE_SEQUENCE.displayName=Escape Sequence
attribute.INVALID_ESCAPE_SEQUENCE.displayName=Invalid Escape Sequence
attribute.ESCAPE_SEQUENCE.displayName=Strings//Escape Sequence
attribute.INVALID_ESCAPE_SEQUENCE.displayName=Strings//Invalid Escape Sequence
attribute.VARIABLE.displayName=Variable Declaration
attribute.VARIABLE_REF.displayName=Variable Reference
attribute.COMMENT.displayName=Comment
Expand Down

0 comments on commit ae6478c

Please sign in to comment.