Skip to content

Commit

Permalink
Add comma as bareword char, except in braced lists
Browse files Browse the repository at this point in the history
  • Loading branch information
sblundy committed Aug 11, 2019
1 parent 189ed79 commit f2fcddc
Show file tree
Hide file tree
Showing 14 changed files with 262 additions and 203 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ plugins {
}

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

repositories {
mavenCentral()
Expand Down
347 changes: 176 additions & 171 deletions src/gen/com/github/sblundy/elvish/lang/ElvishLexer.java

Large diffs are not rendered by default.

47 changes: 38 additions & 9 deletions src/gen/com/github/sblundy/elvish/lang/ElvishParser.java

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

2 changes: 1 addition & 1 deletion src/gen/com/github/sblundy/elvish/psi/ElvishBraced.java

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

6 changes: 5 additions & 1 deletion src/gen/com/github/sblundy/elvish/psi/ElvishTypes.java

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

4 changes: 4 additions & 0 deletions src/gen/com/github/sblundy/elvish/psi/ElvishVisitor.java

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.

9 changes: 5 additions & 4 deletions src/main/grammars/Elvish.bnf
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
BAREWORD_CHAR="regexp:[./@%+!]"
VARIABLE_CHAR="regexp:[0-9a-zA-Z\-_:~]"
COMMAND_BAREWORD_CHAR="regexp:[<>*^]"
BRACED_SEPARATOR="[, ]+"
COMMA=","
WILDCARD="*"
KEYWORD_ELSE="else"
KEYWORD_ELIF="elif"
Expand Down Expand Up @@ -77,7 +77,8 @@ DoubleQuoted ::= DOUBLE_QUOTE (TEXT|ESCAPED_QUOTED_TEXT|INVALID_ESCAPED_QUOTED_T
private Primary ::= Bareword | SingleQuoted | DoubleQuoted | VariableRef | WILDCARD | TILDE | ExceptionCapture | OutputCapture | Lambda | List | Map | Braced
Variable ::= VARIABLE_CHAR+
VariableRef ::= DOLLAR_SIGN AT_SYMBOL? VARIABLE_CHAR+ Index*
Bareword ::= (VARIABLE_CHAR|BAREWORD_CHAR|<<parseKeywordAsBareword>>)+
Bareword ::= (VARIABLE_CHAR|BAREWORD_CHAR|COMMA|<<parseKeywordAsBareword>>)+
BracedBareword ::= (VARIABLE_CHAR|BAREWORD_CHAR|<<parseKeywordAsBareword>>)+
CommandBareword ::= (VARIABLE_CHAR|BAREWORD_CHAR|COMMAND_BAREWORD_CHAR|WILDCARD|EQUALS)+

// Maps and lists
Expand Down Expand Up @@ -114,8 +115,8 @@ OutputCapture ::= OPEN_PARAN Chunk CLOSE_PARAN
Lambda ::= LambdaArguments? OPEN_BRACE Chunk CLOSE_BRACE
LambdaArguments ::=OPEN_BRACKET Space? ((parameter | MapPair) Space?)* CLOSE_BRACKET
parameter ::= AT_SYMBOL? Compound
Braced ::= OPEN_BRACE (Space | EOL)* Bareword (BracedSep* Bareword)* (Space | EOL)* CLOSE_BRACE
BracedSep ::= (Space | EOL)* <<parseCommaAsSeparator>> (Space | EOL)*
Braced ::= OPEN_BRACE (Space | EOL)* BracedBareword (BracedSep* BracedBareword)* (Space | EOL)* CLOSE_BRACE
BracedSep ::= (Space | EOL)* COMMA (Space | EOL)*

// Special Commands

Expand Down
1 change: 1 addition & 0 deletions src/main/grammars/Elvish.flex
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ WHITESPACE=({INLINE_WHITESPACE_CHAR}|{EOL})+
{KEYWORD_USE} { return ElvishTypes.KEYWORD_USE; }
{VARIABLE_CHAR}+ { return ElvishTypes.VARIABLE_CHAR; }
{BAREWORD_CHAR}+ { return ElvishTypes.BAREWORD_CHAR; }
{BRACED_BAREWORD_CHAR} { return ElvishTypes.COMMA; }
{COMMAND_BAREWORD_CHAR}+ { return ElvishTypes.COMMAND_BAREWORD_CHAR; }
}

Expand Down
7 changes: 0 additions & 7 deletions src/main/kotlin/com/github/sblundy/elvish/lang/parserUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,6 @@ private val keywords = setOf(
ElvishTypes.KEYWORD_TRY,
ElvishTypes.KEYWORD_WHILE)

fun parseCommaAsSeparator(builder: PsiBuilder, level: Int): Boolean {
if (builder.tokenText != ",") return false
builder.remapCurrentToken(ElvishTypes.BRACED_SEPARATOR)
builder.advanceLexer()
return true
}

fun parseKeywordAsBareword(builder: PsiBuilder, level: Int): Boolean {
if (!(builder.tokenType in keywords)) return false
builder.remapCurrentToken(ElvishTypes.BAREWORD_CHAR)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
echo text, with comma
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Elvish File
ElvishChunkImpl(CHUNK)
ElvishHeadImpl(HEAD)
ElvishCommandBarewordImpl(COMMAND_BAREWORD)
PsiElement(ElvishTokenType.VARIABLE_CHAR)('echo')
PsiElement(ElvishTokenType.INLINE_WHITESPACE)(' ')
ElvishArgumentImpl(ARGUMENT)
ElvishCompoundImpl(COMPOUND)
ElvishBarewordImpl(BAREWORD)
PsiElement(ElvishTokenType.VARIABLE_CHAR)('text')
PsiElement(ElvishTokenType.,)(',')
PsiElement(ElvishTokenType.INLINE_WHITESPACE)(' ')
ElvishArgumentImpl(ARGUMENT)
ElvishCompoundImpl(COMPOUND)
ElvishBarewordImpl(BAREWORD)
PsiElement(ElvishTokenType.VARIABLE_CHAR)('with')
PsiElement(ElvishTokenType.INLINE_WHITESPACE)(' ')
ElvishArgumentImpl(ARGUMENT)
ElvishCompoundImpl(COMPOUND)
ElvishBarewordImpl(BAREWORD)
PsiElement(ElvishTokenType.VARIABLE_CHAR)('comma')
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ ElvishTokenType.VARIABLE_CHAR ('01')
ElvishTokenType.BAREWORD_CHAR ('/')
ElvishTokenType.{ ('{')
ElvishTokenType.VARIABLE_CHAR ('03')
BAD_CHARACTER (',')
ElvishTokenType., (',')
ElvishTokenType.VARIABLE_CHAR ('10')
BAD_CHARACTER (',')
ElvishTokenType., (',')
ElvishTokenType.VARIABLE_CHAR ('17')
ElvishTokenType.} ('}')
ElvishTokenType.BAREWORD_CHAR ('/')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ Elvish File
PsiElement(ElvishTokenType.BAREWORD_CHAR)('/')
ElvishBracedImpl(BRACED)
PsiElement(ElvishTokenType.{)('{')
ElvishBarewordImpl(BAREWORD)
ElvishBracedBarewordImpl(BRACED_BAREWORD)
PsiElement(ElvishTokenType.VARIABLE_CHAR)('03')
ElvishBracedSepImpl(BRACED_SEP)
PsiElement(ElvishTokenType.[, ]+)(',')
ElvishBarewordImpl(BAREWORD)
PsiElement(ElvishTokenType.,)(',')
ElvishBracedBarewordImpl(BRACED_BAREWORD)
PsiElement(ElvishTokenType.VARIABLE_CHAR)('10')
ElvishBracedSepImpl(BRACED_SEP)
PsiElement(ElvishTokenType.[, ]+)(',')
ElvishBarewordImpl(BAREWORD)
PsiElement(ElvishTokenType.,)(',')
ElvishBracedBarewordImpl(BRACED_BAREWORD)
PsiElement(ElvishTokenType.VARIABLE_CHAR)('17')
PsiElement(ElvishTokenType.})('}')
ElvishBarewordImpl(BAREWORD)
Expand Down

0 comments on commit f2fcddc

Please sign in to comment.