skip shebang in the first line
Something like this works now:
===
% PATH="./bin:$PATH" ./sum.ktscript 31 21
31 + 21 = 52
% cat sum.ktscript
#!/usr/bin/env kotlin -script
val a = Integer.parseInt(args[0])
val b = Integer.parseInt(args[1])
println("$a + $b = ${a + b}")
===
This commit is contained in:
@@ -24,7 +24,10 @@
|
||||
jvmargs="-Xmx512M"
|
||||
fork="true"
|
||||
failonerror="true">
|
||||
<arg value="-charat"/>
|
||||
<!-- generates invalid code when %line option is on
|
||||
<arg value="-sliceandcharat"/>
|
||||
-->
|
||||
<arg value="-skel"/>
|
||||
<arg value="@{skeleton}"/>
|
||||
<arg value="-d"/>
|
||||
|
||||
+2
-1
@@ -55,7 +55,8 @@ public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter imp
|
||||
|
||||
if (previousToken == JetTokens.BLOCK_COMMENT
|
||||
|| previousToken == JetTokens.DOC_COMMENT
|
||||
|| previousToken == JetTokens.EOL_COMMENT) {
|
||||
|| previousToken == JetTokens.EOL_COMMENT
|
||||
|| previousToken == SHEBANG_COMMENT) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,8 @@ import org.jetbrains.jet.lexer.JetTokens;
|
||||
%unicode
|
||||
%class _JetLexer
|
||||
%implements FlexLexer
|
||||
%column
|
||||
%line
|
||||
|
||||
%{
|
||||
private static final class State {
|
||||
@@ -31,6 +33,9 @@ import org.jetbrains.jet.lexer.JetTokens;
|
||||
|
||||
private final Stack<State> states = new Stack<State>();
|
||||
private int lBraceCount;
|
||||
|
||||
private int yyline;
|
||||
private int yycolumn;
|
||||
|
||||
private int commentStart;
|
||||
private int commentDepth;
|
||||
@@ -84,6 +89,7 @@ FIELD_IDENTIFIER = \${IDENTIFIER}
|
||||
LABEL_IDENTIFIER = \@{IDENTIFIER}
|
||||
|
||||
EOL_COMMENT="/""/"[^\n]*
|
||||
SHEBANG_COMMENT="#!"[^\n]*
|
||||
|
||||
INTEGER_LITERAL={DECIMAL_INTEGER_LITERAL}|{HEX_INTEGER_LITERAL}|{BIN_INTEGER_LITERAL}
|
||||
DECIMAL_INTEGER_LITERAL=(0|([1-9]({DIGIT})*))
|
||||
@@ -212,6 +218,15 @@ LONG_TEMPLATE_ENTRY_END=\}
|
||||
({WHITE_SPACE_CHAR})+ { return JetTokens.WHITE_SPACE; }
|
||||
|
||||
{EOL_COMMENT} { return JetTokens.EOL_COMMENT; }
|
||||
{SHEBANG_COMMENT} {
|
||||
if (yyline == 0 && yycolumn == 0) {
|
||||
return JetTokens.SHEBANG_COMMENT;
|
||||
}
|
||||
else {
|
||||
yypushback(yylength() - 1);
|
||||
return JetTokens.HASH;
|
||||
}
|
||||
}
|
||||
|
||||
{INTEGER_LITERAL}\.\. { yypushback(2); return JetTokens.INTEGER_LITERAL; }
|
||||
{INTEGER_LITERAL} { return JetTokens.INTEGER_LITERAL; }
|
||||
|
||||
@@ -29,6 +29,7 @@ public interface JetTokens {
|
||||
JetToken BLOCK_COMMENT = new JetToken("BLOCK_COMMENT");
|
||||
JetToken DOC_COMMENT = new JetToken("DOC_COMMENT");
|
||||
JetToken EOL_COMMENT = new JetToken("EOL_COMMENT");
|
||||
JetToken SHEBANG_COMMENT = new JetToken("SHEBANG_COMMENT");
|
||||
|
||||
IElementType WHITE_SPACE = TokenType.WHITE_SPACE;
|
||||
|
||||
@@ -180,9 +181,9 @@ public interface JetTokens {
|
||||
OPEN_KEYWORD, ANNOTATION_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD,
|
||||
PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD, ERASED_KEYWORD
|
||||
);
|
||||
TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.create(WHITE_SPACE, BLOCK_COMMENT, EOL_COMMENT, DOC_COMMENT);
|
||||
TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.create(WHITE_SPACE, BLOCK_COMMENT, EOL_COMMENT, DOC_COMMENT, SHEBANG_COMMENT);
|
||||
TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE);
|
||||
TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT);
|
||||
TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT, SHEBANG_COMMENT);
|
||||
|
||||
TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART);
|
||||
TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, EXCLEXCL, MUL, PLUS,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env kotlin
|
||||
|
||||
println(args)
|
||||
@@ -0,0 +1,14 @@
|
||||
JetFile: Shebang.ktscript
|
||||
PsiComment(SHEBANG_COMMENT)('#!/usr/bin/env kotlin')
|
||||
PsiWhiteSpace('\n\n')
|
||||
SCRIPT
|
||||
BLOCK
|
||||
CALL_EXPRESSION
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('println')
|
||||
VALUE_ARGUMENT_LIST
|
||||
PsiElement(LPAR)('(')
|
||||
VALUE_ARGUMENT
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('args')
|
||||
PsiElement(RPAR)(')')
|
||||
@@ -0,0 +1,3 @@
|
||||
println(1); #!/usr
|
||||
|
||||
#!/hi
|
||||
@@ -0,0 +1,35 @@
|
||||
JetFile: ShebangIncorrect.ktscript
|
||||
SCRIPT
|
||||
BLOCK
|
||||
CALL_EXPRESSION
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('println')
|
||||
VALUE_ARGUMENT_LIST
|
||||
PsiElement(LPAR)('(')
|
||||
VALUE_ARGUMENT
|
||||
INTEGER_CONSTANT
|
||||
PsiElement(INTEGER_LITERAL)('1')
|
||||
PsiElement(RPAR)(')')
|
||||
PsiElement(SEMICOLON)(';')
|
||||
PsiWhiteSpace(' ')
|
||||
BINARY_EXPRESSION
|
||||
TUPLE
|
||||
PsiElement(HASH)('#')
|
||||
PsiElement(EXCL)('!')
|
||||
PsiErrorElement:Expecting an expression
|
||||
<empty list>
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(DIV)('/')
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('usr')
|
||||
PsiWhiteSpace('\n\n')
|
||||
BINARY_EXPRESSION
|
||||
TUPLE
|
||||
PsiElement(HASH)('#')
|
||||
PsiElement(EXCL)('!')
|
||||
PsiErrorElement:Expecting an expression
|
||||
<empty list>
|
||||
OPERATION_REFERENCE
|
||||
PsiElement(DIV)('/')
|
||||
REFERENCE_EXPRESSION
|
||||
PsiElement(IDENTIFIER)('hi')
|
||||
@@ -82,6 +82,7 @@ public class JetHighlighter extends SyntaxHighlighterBase {
|
||||
keys.put(JetTokens.CHARACTER_LITERAL, JetHighlightingColors.STRING);
|
||||
|
||||
keys.put(JetTokens.EOL_COMMENT, JetHighlightingColors.LINE_COMMENT);
|
||||
keys.put(JetTokens.SHEBANG_COMMENT, JetHighlightingColors.LINE_COMMENT);
|
||||
keys.put(JetTokens.BLOCK_COMMENT, JetHighlightingColors.BLOCK_COMMENT);
|
||||
keys.put(JetTokens.DOC_COMMENT, JetHighlightingColors.DOC_COMMENT);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user