From 000cec36256fd924dd754c0637671d0be539cc30 Mon Sep 17 00:00:00 2001 From: BloodWorkXGaming Date: Fri, 10 Nov 2017 19:04:34 +0100 Subject: [PATCH] Fixed preprocessors, added more auto completion --- ZenScriptIntelliJPlugin.jar | Bin 0 -> 129922 bytes .../plugin/zsLanguage/parsing/ZsParser.java | 285 ++++++++++++++---- .../zsLanguage/psi/ZsAssignStatement.java | 4 +- .../zsLanguage/psi/ZsFieldReference.java | 13 + .../plugin/zsLanguage/psi/ZsModuloType.java | 19 ++ .../plugin/zsLanguage/psi/ZsPreprocessor.java | 10 + .../zsLanguage/psi/ZsPreprocessorList.java | 13 + .../zsLanguage/psi/ZsStatementBody.java | 3 + .../plugin/zsLanguage/psi/ZsTypes.java | 16 + .../zsLanguage/psi/ZsValidVariable.java | 6 + .../plugin/zsLanguage/psi/ZsVisitor.java | 16 + .../psi/impl/ZsAssignStatementImpl.java | 8 +- .../psi/impl/ZsFieldReferenceImpl.java | 35 +++ .../zsLanguage/psi/impl/ZsModuloTypeImpl.java | 47 +++ .../psi/impl/ZsPreprocessorImpl.java | 29 ++ .../psi/impl/ZsPreprocessorListImpl.java | 35 +++ .../psi/impl/ZsStatementBodyImpl.java | 6 + .../psi/impl/ZsValidVariableImpl.java | 12 + resources/META-INF/plugin.xml | 1 + .../completion/ZsCompletionContributor.java | 27 ++ .../zsLanguage/formatter/ZsAnnotator.java | 17 ++ .../zsLanguage/formatter/ZsBraceMatcher.java | 8 +- .../formatter/ZsSyntaxHighlighter.java | 25 +- .../zsLanguage/formatter/ZsTypes_old.java | 61 ---- .../zsLanguage/parsing/ZsParserUtil.java | 6 + .../plugin/zsLanguage/psi/ZenScript.bnf | 26 +- 26 files changed, 590 insertions(+), 138 deletions(-) create mode 100644 ZenScriptIntelliJPlugin.jar create mode 100644 gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsFieldReference.java create mode 100644 gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsModuloType.java create mode 100644 gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsPreprocessor.java create mode 100644 gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsPreprocessorList.java create mode 100644 gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsFieldReferenceImpl.java create mode 100644 gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsModuloTypeImpl.java create mode 100644 gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsPreprocessorImpl.java create mode 100644 gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsPreprocessorListImpl.java create mode 100644 src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsAnnotator.java delete mode 100644 src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsTypes_old.java create mode 100644 src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/parsing/ZsParserUtil.java diff --git a/ZenScriptIntelliJPlugin.jar b/ZenScriptIntelliJPlugin.jar new file mode 100644 index 0000000000000000000000000000000000000000..cb78f8977219e160dcb01727972e826a08e06906 GIT binary patch literal 129922 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 tF<;|a8@6a5<_jjE$d7SZVt#GywJvRS!X4"); r = assignStatement_0(b, l + 1); - r = r && variable(b, l + 1); + r = r && field_reference(b, l + 1); r = r && consumeToken(b, EQUAL); r = r && validVariable(b, l + 1); exit_section_(b, l, m, r, false, null); @@ -241,13 +253,12 @@ private static boolean assignStatement_0_0(PsiBuilder b, int l) { } /* ********************************************************** */ - // PLUS | MINUS | ASTERISK | DIV + // PLUS MINUS | ASTERISK | DIV static boolean binary_math_signs(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "binary_math_signs")) return false; boolean r; Marker m = enter_section_(b); - r = consumeToken(b, PLUS); - if (!r) r = consumeToken(b, MINUS); + r = parseTokens(b, 0, PLUS, MINUS); if (!r) r = consumeToken(b, ASTERISK); if (!r) r = consumeToken(b, DIV); exit_section_(b, m, null, r); @@ -354,21 +365,43 @@ private static boolean class_name_1_0(PsiBuilder b, int l) { } /* ********************************************************** */ - // validVariable (EQEQ | NOT_EQUAL | GREATER_EQUAL | LESS_EQUAL | L_ANGLE_BRACKET | R_ANGLE_BRACKET) validVariable + // validVariable ((EQEQ | NOT_EQUAL | GREATER_EQUAL | LESS_EQUAL | L_ANGLE_BRACKET | R_ANGLE_BRACKET) validVariable)* public static boolean condition(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "condition")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, CONDITION, ""); r = validVariable(b, l + 1); r = r && condition_1(b, l + 1); - r = r && validVariable(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } - // EQEQ | NOT_EQUAL | GREATER_EQUAL | LESS_EQUAL | L_ANGLE_BRACKET | R_ANGLE_BRACKET + // ((EQEQ | NOT_EQUAL | GREATER_EQUAL | LESS_EQUAL | L_ANGLE_BRACKET | R_ANGLE_BRACKET) validVariable)* private static boolean condition_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "condition_1")) return false; + int c = current_position_(b); + while (true) { + if (!condition_1_0(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "condition_1", c)) break; + c = current_position_(b); + } + return true; + } + + // (EQEQ | NOT_EQUAL | GREATER_EQUAL | LESS_EQUAL | L_ANGLE_BRACKET | R_ANGLE_BRACKET) validVariable + private static boolean condition_1_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "condition_1_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = condition_1_0_0(b, l + 1); + r = r && validVariable(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // EQEQ | NOT_EQUAL | GREATER_EQUAL | LESS_EQUAL | L_ANGLE_BRACKET | R_ANGLE_BRACKET + private static boolean condition_1_0_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "condition_1_0_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, EQEQ); @@ -436,6 +469,40 @@ private static boolean equation_2_0_1(PsiBuilder b, int l) { return true; } + /* ********************************************************** */ + // validCallable (DOT IDENTIFIER)* + public static boolean field_reference(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "field_reference")) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, FIELD_REFERENCE, ""); + r = validCallable(b, l + 1); + r = r && field_reference_1(b, l + 1); + exit_section_(b, l, m, r, false, null); + return r; + } + + // (DOT IDENTIFIER)* + private static boolean field_reference_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "field_reference_1")) return false; + int c = current_position_(b); + while (true) { + if (!field_reference_1_0(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "field_reference_1", c)) break; + c = current_position_(b); + } + return true; + } + + // DOT IDENTIFIER + private static boolean field_reference_1_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "field_reference_1_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeTokens(b, 0, DOT, IDENTIFIER); + exit_section_(b, m, null, r); + return r; + } + /* ********************************************************** */ // FOR (((variable COMMA)? variable in variable) | (variable IN DIGITS ((DOT DOT) | TO) DIGITS)) statement_body public static boolean for_loop(PsiBuilder b, int l) { @@ -527,89 +594,115 @@ private static boolean for_loop_1_1_3_0(PsiBuilder b, int l) { } /* ********************************************************** */ - // validCallable (DOT IDENTIFIER)* (L_ROUND_BRACKET R_ROUND_BRACKET | (L_ROUND_BRACKET (validVariable (COMMA validVariable)*) R_ROUND_BRACKET)) + // validCallable ((DOT IDENTIFIER)* (L_ROUND_BRACKET R_ROUND_BRACKET | (L_ROUND_BRACKET (validVariable (COMMA validVariable)*) R_ROUND_BRACKET)))+ public static boolean functionCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "functionCall")) return false; boolean r; Marker m = enter_section_(b, l, _NONE_, FUNCTION_CALL, ""); r = validCallable(b, l + 1); r = r && functionCall_1(b, l + 1); - r = r && functionCall_2(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } - // (DOT IDENTIFIER)* + // ((DOT IDENTIFIER)* (L_ROUND_BRACKET R_ROUND_BRACKET | (L_ROUND_BRACKET (validVariable (COMMA validVariable)*) R_ROUND_BRACKET)))+ private static boolean functionCall_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "functionCall_1")) return false; + boolean r; + Marker m = enter_section_(b); + r = functionCall_1_0(b, l + 1); int c = current_position_(b); - while (true) { + while (r) { if (!functionCall_1_0(b, l + 1)) break; if (!empty_element_parsed_guard_(b, "functionCall_1", c)) break; c = current_position_(b); } - return true; + exit_section_(b, m, null, r); + return r; } - // DOT IDENTIFIER + // (DOT IDENTIFIER)* (L_ROUND_BRACKET R_ROUND_BRACKET | (L_ROUND_BRACKET (validVariable (COMMA validVariable)*) R_ROUND_BRACKET)) private static boolean functionCall_1_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "functionCall_1_0")) return false; boolean r; Marker m = enter_section_(b); + r = functionCall_1_0_0(b, l + 1); + r = r && functionCall_1_0_1(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // (DOT IDENTIFIER)* + private static boolean functionCall_1_0_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "functionCall_1_0_0")) return false; + int c = current_position_(b); + while (true) { + if (!functionCall_1_0_0_0(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "functionCall_1_0_0", c)) break; + c = current_position_(b); + } + return true; + } + + // DOT IDENTIFIER + private static boolean functionCall_1_0_0_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "functionCall_1_0_0_0")) return false; + boolean r; + Marker m = enter_section_(b); r = consumeTokens(b, 0, DOT, IDENTIFIER); exit_section_(b, m, null, r); return r; } // L_ROUND_BRACKET R_ROUND_BRACKET | (L_ROUND_BRACKET (validVariable (COMMA validVariable)*) R_ROUND_BRACKET) - private static boolean functionCall_2(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "functionCall_2")) return false; + private static boolean functionCall_1_0_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "functionCall_1_0_1")) return false; boolean r; Marker m = enter_section_(b); r = parseTokens(b, 0, L_ROUND_BRACKET, R_ROUND_BRACKET); - if (!r) r = functionCall_2_1(b, l + 1); + if (!r) r = functionCall_1_0_1_1(b, l + 1); exit_section_(b, m, null, r); return r; } // L_ROUND_BRACKET (validVariable (COMMA validVariable)*) R_ROUND_BRACKET - private static boolean functionCall_2_1(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "functionCall_2_1")) return false; + private static boolean functionCall_1_0_1_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "functionCall_1_0_1_1")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, L_ROUND_BRACKET); - r = r && functionCall_2_1_1(b, l + 1); + r = r && functionCall_1_0_1_1_1(b, l + 1); r = r && consumeToken(b, R_ROUND_BRACKET); exit_section_(b, m, null, r); return r; } // validVariable (COMMA validVariable)* - private static boolean functionCall_2_1_1(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "functionCall_2_1_1")) return false; + private static boolean functionCall_1_0_1_1_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "functionCall_1_0_1_1_1")) return false; boolean r; Marker m = enter_section_(b); r = validVariable(b, l + 1); - r = r && functionCall_2_1_1_1(b, l + 1); + r = r && functionCall_1_0_1_1_1_1(b, l + 1); exit_section_(b, m, null, r); return r; } // (COMMA validVariable)* - private static boolean functionCall_2_1_1_1(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "functionCall_2_1_1_1")) return false; + private static boolean functionCall_1_0_1_1_1_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "functionCall_1_0_1_1_1_1")) return false; int c = current_position_(b); while (true) { - if (!functionCall_2_1_1_1_0(b, l + 1)) break; - if (!empty_element_parsed_guard_(b, "functionCall_2_1_1_1", c)) break; + if (!functionCall_1_0_1_1_1_1_0(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "functionCall_1_0_1_1_1_1", c)) break; c = current_position_(b); } return true; } // COMMA validVariable - private static boolean functionCall_2_1_1_1_0(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "functionCall_2_1_1_1_0")) return false; + private static boolean functionCall_1_0_1_1_1_1_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "functionCall_1_0_1_1_1_1_0")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, COMMA); @@ -906,14 +999,25 @@ private static boolean lambda_function_declaration_2_0(PsiBuilder b, int l) { } /* ********************************************************** */ - // L_ROUND_BRACKET | R_ROUND_BRACKET - static boolean math_brackets(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "math_brackets")) return false; - if (!nextTokenIs(b, "", L_ROUND_BRACKET, R_ROUND_BRACKET)) return false; + // (bracketHandler | variable)PERC DIGITS + public static boolean moduloType(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "moduloType")) return false; + if (!nextTokenIs(b, "", IDENTIFIER, L_ANGLE_BRACKET)) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, MODULO_TYPE, ""); + r = moduloType_0(b, l + 1); + r = r && consumeTokens(b, 0, PERC, DIGITS); + exit_section_(b, l, m, r, false, null); + return r; + } + + // bracketHandler | variable + private static boolean moduloType_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "moduloType_0")) return false; boolean r; Marker m = enter_section_(b); - r = consumeToken(b, L_ROUND_BRACKET); - if (!r) r = consumeToken(b, R_ROUND_BRACKET); + r = bracketHandler(b, l + 1); + if (!r) r = variable(b, l + 1); exit_section_(b, m, null, r); return r; } @@ -998,6 +1102,46 @@ private static boolean parameter_variable_1_0(PsiBuilder b, int l) { return r; } + /* ********************************************************** */ + // HASH IDENTIFIER* + public static boolean preprocessor(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "preprocessor")) return false; + if (!nextTokenIs(b, HASH)) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, HASH); + r = r && preprocessor_1(b, l + 1); + exit_section_(b, m, PREPROCESSOR, r); + return r; + } + + // IDENTIFIER* + private static boolean preprocessor_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "preprocessor_1")) return false; + int c = current_position_(b); + while (true) { + if (!consumeToken(b, IDENTIFIER)) break; + if (!empty_element_parsed_guard_(b, "preprocessor_1", c)) break; + c = current_position_(b); + } + return true; + } + + /* ********************************************************** */ + // preprocessor* + public static boolean preprocessor_list(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "preprocessor_list")) return false; + Marker m = enter_section_(b, l, _NONE_, PREPROCESSOR_LIST, ""); + int c = current_position_(b); + while (true) { + if (!preprocessor(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "preprocessor_list", c)) break; + c = current_position_(b); + } + exit_section_(b, l, m, true, false, null); + return true; + } + /* ********************************************************** */ // RETURN validVariable SEMICOLON public static boolean return_statement(PsiBuilder b, int l) { @@ -1054,31 +1198,48 @@ private static boolean statement_2(PsiBuilder b, int l) { } /* ********************************************************** */ - // L_CURLY_BRACKET statement* R_CURLY_BRACKET + // L_CURLY_BRACKET statement* R_CURLY_BRACKET | function_body public static boolean statement_body(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "statement_body")) return false; if (!nextTokenIs(b, L_CURLY_BRACKET)) return false; boolean r; Marker m = enter_section_(b); + r = statement_body_0(b, l + 1); + if (!r) r = function_body(b, l + 1); + exit_section_(b, m, STATEMENT_BODY, r); + return r; + } + + // L_CURLY_BRACKET statement* R_CURLY_BRACKET + private static boolean statement_body_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "statement_body_0")) return false; + boolean r; + Marker m = enter_section_(b); r = consumeToken(b, L_CURLY_BRACKET); - r = r && statement_body_1(b, l + 1); + r = r && statement_body_0_1(b, l + 1); r = r && consumeToken(b, R_CURLY_BRACKET); - exit_section_(b, m, STATEMENT_BODY, r); + exit_section_(b, m, null, r); return r; } // statement* - private static boolean statement_body_1(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "statement_body_1")) return false; + private static boolean statement_body_0_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "statement_body_0_1")) return false; int c = current_position_(b); while (true) { if (!statement(b, l + 1)) break; - if (!empty_element_parsed_guard_(b, "statement_body_1", c)) break; + if (!empty_element_parsed_guard_(b, "statement_body_0_1", c)) break; c = current_position_(b); } return true; } + /* ********************************************************** */ + // SEMICOLON + static boolean statement_recover(PsiBuilder b, int l) { + return consumeToken(b, SEMICOLON); + } + /* ********************************************************** */ // EXCL static boolean unary_math_signs(PsiBuilder b, int l) { @@ -1086,7 +1247,11 @@ static boolean unary_math_signs(PsiBuilder b, int l) { } /* ********************************************************** */ - // bracketHandler | variable | DOUBLE_QUOTED_STRING | SINGLE_QUOTED_STRING | arrayRead + // bracketHandler + // | variable + // | DOUBLE_QUOTED_STRING + // | SINGLE_QUOTED_STRING + // | arrayRead public static boolean validCallable(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "validCallable")) return false; boolean r; @@ -1106,6 +1271,7 @@ public static boolean validCallable(PsiBuilder b, int l) { // | equation // | bracketHandler // | functionCall + // | field_reference // | variable // | number // | NULL @@ -1113,6 +1279,9 @@ public static boolean validCallable(PsiBuilder b, int l) { // | SINGLE_QUOTED_STRING // | arrayDeclaration // | arrayRead + // | moduloType + // | TRUE + // | FALSE public static boolean validVariable(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "validVariable")) return false; boolean r; @@ -1122,6 +1291,7 @@ public static boolean validVariable(PsiBuilder b, int l) { if (!r) r = equation(b, l + 1); if (!r) r = bracketHandler(b, l + 1); if (!r) r = functionCall(b, l + 1); + if (!r) r = field_reference(b, l + 1); if (!r) r = variable(b, l + 1); if (!r) r = number(b, l + 1); if (!r) r = consumeToken(b, NULL); @@ -1129,6 +1299,9 @@ public static boolean validVariable(PsiBuilder b, int l) { if (!r) r = consumeToken(b, SINGLE_QUOTED_STRING); if (!r) r = arrayDeclaration(b, l + 1); if (!r) r = arrayRead(b, l + 1); + if (!r) r = moduloType(b, l + 1); + if (!r) r = consumeToken(b, TRUE); + if (!r) r = consumeToken(b, FALSE); exit_section_(b, l, m, r, false, null); return r; } @@ -1165,32 +1338,40 @@ public static boolean variable(PsiBuilder b, int l) { } /* ********************************************************** */ - // import_list (statement | function_declaration )* + // preprocessor_list? import_list (statement | function_declaration )* static boolean zsFile(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "zsFile")) return false; boolean r; Marker m = enter_section_(b); - r = import_list(b, l + 1); - r = r && zsFile_1(b, l + 1); + r = zsFile_0(b, l + 1); + r = r && import_list(b, l + 1); + r = r && zsFile_2(b, l + 1); exit_section_(b, m, null, r); return r; } + // preprocessor_list? + private static boolean zsFile_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "zsFile_0")) return false; + preprocessor_list(b, l + 1); + return true; + } + // (statement | function_declaration )* - private static boolean zsFile_1(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "zsFile_1")) return false; + private static boolean zsFile_2(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "zsFile_2")) return false; int c = current_position_(b); while (true) { - if (!zsFile_1_0(b, l + 1)) break; - if (!empty_element_parsed_guard_(b, "zsFile_1", c)) break; + if (!zsFile_2_0(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "zsFile_2", c)) break; c = current_position_(b); } return true; } // statement | function_declaration - private static boolean zsFile_1_0(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "zsFile_1_0")) return false; + private static boolean zsFile_2_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "zsFile_2_0")) return false; boolean r; Marker m = enter_section_(b); r = statement(b, l + 1); diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsAssignStatement.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsAssignStatement.java index eb4ee0b..712554d 100644 --- a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsAssignStatement.java +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsAssignStatement.java @@ -8,9 +8,9 @@ public interface ZsAssignStatement extends PsiElement { @NotNull - ZsValidVariable getValidVariable(); + ZsFieldReference getFieldReference(); @NotNull - ZsVariable getVariable(); + ZsValidVariable getValidVariable(); } diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsFieldReference.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsFieldReference.java new file mode 100644 index 0000000..53612e6 --- /dev/null +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsFieldReference.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface ZsFieldReference extends PsiElement { + + @NotNull + ZsValidCallable getValidCallable(); + +} diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsModuloType.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsModuloType.java new file mode 100644 index 0000000..44201c7 --- /dev/null +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsModuloType.java @@ -0,0 +1,19 @@ +// This is a generated file. Not intended for manual editing. +package de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface ZsModuloType extends PsiElement { + + @Nullable + ZsBracketHandler getBracketHandler(); + + @Nullable + ZsVariable getVariable(); + + @NotNull + PsiElement getDigits(); + +} diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsPreprocessor.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsPreprocessor.java new file mode 100644 index 0000000..224d7a2 --- /dev/null +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsPreprocessor.java @@ -0,0 +1,10 @@ +// This is a generated file. Not intended for manual editing. +package de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface ZsPreprocessor extends PsiElement { + +} diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsPreprocessorList.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsPreprocessorList.java new file mode 100644 index 0000000..d5880be --- /dev/null +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsPreprocessorList.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface ZsPreprocessorList extends PsiElement { + + @NotNull + List getPreprocessorList(); + +} diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsStatementBody.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsStatementBody.java index 7216986..57bc316 100644 --- a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsStatementBody.java +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsStatementBody.java @@ -7,6 +7,9 @@ public interface ZsStatementBody extends PsiElement { + @Nullable + ZsFunctionBody getFunctionBody(); + @NotNull List getStatementList(); diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsTypes.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsTypes.java index 6d00924..fde56eb 100644 --- a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsTypes.java +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsTypes.java @@ -16,6 +16,7 @@ public interface ZsTypes { IElementType CLASS_NAME = new ZsElementType("CLASS_NAME"); IElementType CONDITION = new ZsElementType("CONDITION"); IElementType EQUATION = new ZsElementType("EQUATION"); + IElementType FIELD_REFERENCE = new ZsElementType("FIELD_REFERENCE"); IElementType FOR_LOOP = new ZsElementType("FOR_LOOP"); IElementType FUNCTION_BODY = new ZsElementType("FUNCTION_BODY"); IElementType FUNCTION_CALL = new ZsElementType("FUNCTION_CALL"); @@ -24,9 +25,12 @@ public interface ZsTypes { IElementType IMPORT_LIST = new ZsElementType("IMPORT_LIST"); IElementType IMPORT_STATEMENT = new ZsElementType("IMPORT_STATEMENT"); IElementType LAMBDA_FUNCTION_DECLARATION = new ZsElementType("LAMBDA_FUNCTION_DECLARATION"); + IElementType MODULO_TYPE = new ZsElementType("MODULO_TYPE"); IElementType NUMBER = new ZsElementType("NUMBER"); IElementType PARAMETER_LIST = new ZsElementType("PARAMETER_LIST"); IElementType PARAMETER_VARIABLE = new ZsElementType("PARAMETER_VARIABLE"); + IElementType PREPROCESSOR = new ZsElementType("PREPROCESSOR"); + IElementType PREPROCESSOR_LIST = new ZsElementType("PREPROCESSOR_LIST"); IElementType RETURN_STATEMENT = new ZsElementType("RETURN_STATEMENT"); IElementType STATEMENT = new ZsElementType("STATEMENT"); IElementType STATEMENT_BODY = new ZsElementType("STATEMENT_BODY"); @@ -125,6 +129,9 @@ else if (type == CONDITION) { else if (type == EQUATION) { return new ZsEquationImpl(node); } + else if (type == FIELD_REFERENCE) { + return new ZsFieldReferenceImpl(node); + } else if (type == FOR_LOOP) { return new ZsForLoopImpl(node); } @@ -149,6 +156,9 @@ else if (type == IMPORT_STATEMENT) { else if (type == LAMBDA_FUNCTION_DECLARATION) { return new ZsLambdaFunctionDeclarationImpl(node); } + else if (type == MODULO_TYPE) { + return new ZsModuloTypeImpl(node); + } else if (type == NUMBER) { return new ZsNumberImpl(node); } @@ -158,6 +168,12 @@ else if (type == PARAMETER_LIST) { else if (type == PARAMETER_VARIABLE) { return new ZsParameterVariableImpl(node); } + else if (type == PREPROCESSOR) { + return new ZsPreprocessorImpl(node); + } + else if (type == PREPROCESSOR_LIST) { + return new ZsPreprocessorListImpl(node); + } else if (type == RETURN_STATEMENT) { return new ZsReturnStatementImpl(node); } diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsValidVariable.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsValidVariable.java index c9b2192..f103015 100644 --- a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsValidVariable.java +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsValidVariable.java @@ -22,12 +22,18 @@ public interface ZsValidVariable extends PsiElement { @Nullable ZsEquation getEquation(); + @Nullable + ZsFieldReference getFieldReference(); + @Nullable ZsFunctionCall getFunctionCall(); @Nullable ZsLambdaFunctionDeclaration getLambdaFunctionDeclaration(); + @Nullable + ZsModuloType getModuloType(); + @Nullable ZsNumber getNumber(); diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsVisitor.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsVisitor.java index 2ef3a00..82d88ac 100644 --- a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsVisitor.java +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZsVisitor.java @@ -39,6 +39,10 @@ public void visitEquation(@NotNull ZsEquation o) { visitPsiElement(o); } + public void visitFieldReference(@NotNull ZsFieldReference o) { + visitPsiElement(o); + } + public void visitForLoop(@NotNull ZsForLoop o) { visitPsiElement(o); } @@ -71,6 +75,10 @@ public void visitLambdaFunctionDeclaration(@NotNull ZsLambdaFunctionDeclaration visitPsiElement(o); } + public void visitModuloType(@NotNull ZsModuloType o) { + visitPsiElement(o); + } + public void visitNumber(@NotNull ZsNumber o) { visitPsiElement(o); } @@ -83,6 +91,14 @@ public void visitParameterVariable(@NotNull ZsParameterVariable o) { visitPsiElement(o); } + public void visitPreprocessor(@NotNull ZsPreprocessor o) { + visitPsiElement(o); + } + + public void visitPreprocessorList(@NotNull ZsPreprocessorList o) { + visitPsiElement(o); + } + public void visitReturnStatement(@NotNull ZsReturnStatement o) { visitPsiElement(o); } diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsAssignStatementImpl.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsAssignStatementImpl.java index b8f2a7f..49bebfb 100644 --- a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsAssignStatementImpl.java +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsAssignStatementImpl.java @@ -28,14 +28,14 @@ public void accept(@NotNull PsiElementVisitor visitor) { @Override @NotNull - public ZsValidVariable getValidVariable() { - return findNotNullChildByClass(ZsValidVariable.class); + public ZsFieldReference getFieldReference() { + return findNotNullChildByClass(ZsFieldReference.class); } @Override @NotNull - public ZsVariable getVariable() { - return findNotNullChildByClass(ZsVariable.class); + public ZsValidVariable getValidVariable() { + return findNotNullChildByClass(ZsValidVariable.class); } } diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsFieldReferenceImpl.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsFieldReferenceImpl.java new file mode 100644 index 0000000..1773f07 --- /dev/null +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsFieldReferenceImpl.java @@ -0,0 +1,35 @@ +// This is a generated file. Not intended for manual editing. +package de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.ZsTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.*; + +public class ZsFieldReferenceImpl extends ASTWrapperPsiElement implements ZsFieldReference { + + public ZsFieldReferenceImpl(ASTNode node) { + super(node); + } + + public void accept(@NotNull ZsVisitor visitor) { + visitor.visitFieldReference(this); + } + + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof ZsVisitor) accept((ZsVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public ZsValidCallable getValidCallable() { + return findNotNullChildByClass(ZsValidCallable.class); + } + +} diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsModuloTypeImpl.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsModuloTypeImpl.java new file mode 100644 index 0000000..0f9a9ca --- /dev/null +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsModuloTypeImpl.java @@ -0,0 +1,47 @@ +// This is a generated file. Not intended for manual editing. +package de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.ZsTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.*; + +public class ZsModuloTypeImpl extends ASTWrapperPsiElement implements ZsModuloType { + + public ZsModuloTypeImpl(ASTNode node) { + super(node); + } + + public void accept(@NotNull ZsVisitor visitor) { + visitor.visitModuloType(this); + } + + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof ZsVisitor) accept((ZsVisitor)visitor); + else super.accept(visitor); + } + + @Override + @Nullable + public ZsBracketHandler getBracketHandler() { + return findChildByClass(ZsBracketHandler.class); + } + + @Override + @Nullable + public ZsVariable getVariable() { + return findChildByClass(ZsVariable.class); + } + + @Override + @NotNull + public PsiElement getDigits() { + return findNotNullChildByType(DIGITS); + } + +} diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsPreprocessorImpl.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsPreprocessorImpl.java new file mode 100644 index 0000000..0f52d7c --- /dev/null +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsPreprocessorImpl.java @@ -0,0 +1,29 @@ +// This is a generated file. Not intended for manual editing. +package de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.ZsTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.*; + +public class ZsPreprocessorImpl extends ASTWrapperPsiElement implements ZsPreprocessor { + + public ZsPreprocessorImpl(ASTNode node) { + super(node); + } + + public void accept(@NotNull ZsVisitor visitor) { + visitor.visitPreprocessor(this); + } + + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof ZsVisitor) accept((ZsVisitor)visitor); + else super.accept(visitor); + } + +} diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsPreprocessorListImpl.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsPreprocessorListImpl.java new file mode 100644 index 0000000..4dc9259 --- /dev/null +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsPreprocessorListImpl.java @@ -0,0 +1,35 @@ +// This is a generated file. Not intended for manual editing. +package de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.ZsTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.*; + +public class ZsPreprocessorListImpl extends ASTWrapperPsiElement implements ZsPreprocessorList { + + public ZsPreprocessorListImpl(ASTNode node) { + super(node); + } + + public void accept(@NotNull ZsVisitor visitor) { + visitor.visitPreprocessorList(this); + } + + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof ZsVisitor) accept((ZsVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getPreprocessorList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, ZsPreprocessor.class); + } + +} diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsStatementBodyImpl.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsStatementBodyImpl.java index d093f66..c57553e 100644 --- a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsStatementBodyImpl.java +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsStatementBodyImpl.java @@ -26,6 +26,12 @@ public void accept(@NotNull PsiElementVisitor visitor) { else super.accept(visitor); } + @Override + @Nullable + public ZsFunctionBody getFunctionBody() { + return findChildByClass(ZsFunctionBody.class); + } + @Override @NotNull public List getStatementList() { diff --git a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsValidVariableImpl.java b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsValidVariableImpl.java index 8dfb9d6..a9089b9 100644 --- a/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsValidVariableImpl.java +++ b/gen/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/impl/ZsValidVariableImpl.java @@ -56,6 +56,12 @@ public ZsEquation getEquation() { return findChildByClass(ZsEquation.class); } + @Override + @Nullable + public ZsFieldReference getFieldReference() { + return findChildByClass(ZsFieldReference.class); + } + @Override @Nullable public ZsFunctionCall getFunctionCall() { @@ -68,6 +74,12 @@ public ZsLambdaFunctionDeclaration getLambdaFunctionDeclaration() { return findChildByClass(ZsLambdaFunctionDeclaration.class); } + @Override + @Nullable + public ZsModuloType getModuloType() { + return findChildByClass(ZsModuloType.class); + } + @Override @Nullable public ZsNumber getNumber() { diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index 05b1fa9..170d780 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -37,6 +37,7 @@ + diff --git a/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/completion/ZsCompletionContributor.java b/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/completion/ZsCompletionContributor.java index 0a5bfa0..b7707d5 100644 --- a/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/completion/ZsCompletionContributor.java +++ b/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/completion/ZsCompletionContributor.java @@ -1,13 +1,24 @@ package de.bloodworkxgaming.zenscript.plugin.zsLanguage.completion; import com.intellij.codeInsight.completion.*; +import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.patterns.PlatformPatterns; +import com.intellij.psi.PsiNamedElement; import com.intellij.util.ProcessingContext; +import de.bloodworkxgaming.zenscript.plugin.zsLanguage.ZsIcon; import de.bloodworkxgaming.zenscript.plugin.zsLanguage.ZsLanguage; +import de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.ZsFile; import de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.ZsTypes; +import de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.ZsUtil; +import de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.ZsVariable; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + public class ZsCompletionContributor extends CompletionContributor { private String[] keywords = { "any", @@ -44,6 +55,22 @@ protected void addCompletions(@NotNull CompletionParameters parameters, Processi for (String keyword : keywords) { result.addElement(LookupElementBuilder.create(keyword)); } + + if (parameters.getOriginalFile() instanceof ZsFile){ + + List properties = ZsUtil.findVariables((ZsFile) parameters.getOriginalFile()); + Set alreadyAdded = new HashSet<>(); + + for (final ZsVariable property : properties) { + if (property.getName() != null && property.getName().length() > 0) { + if (!alreadyAdded.contains(property.getName())){ + alreadyAdded.add(property.getName()); + + result.addElement(LookupElementBuilder.create(property)); + } + } + } + } } }); } diff --git a/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsAnnotator.java b/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsAnnotator.java new file mode 100644 index 0000000..b456417 --- /dev/null +++ b/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsAnnotator.java @@ -0,0 +1,17 @@ +package de.bloodworkxgaming.zenscript.plugin.zsLanguage.formatter; + +import com.intellij.lang.annotation.AnnotationHolder; +import com.intellij.lang.annotation.Annotator; +import com.intellij.openapi.project.DumbAware; +import com.intellij.psi.PsiElement; +import de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.ZsVariable; +import org.jetbrains.annotations.NotNull; + +public class ZsAnnotator implements Annotator, DumbAware{ + @Override + public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) { + if (element instanceof ZsVariable){ + holder.createInfoAnnotation(element.getTextRange(), "ZenScript Variable: " + ((ZsVariable) element).getName()); + } + } +} diff --git a/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsBraceMatcher.java b/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsBraceMatcher.java index 8413e37..e78e623 100644 --- a/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsBraceMatcher.java +++ b/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsBraceMatcher.java @@ -13,10 +13,10 @@ public class ZsBraceMatcher implements PairedBraceMatcher { @Override public BracePair[] getPairs() { return new BracePair[]{ - new BracePair(ZsTypes.L_ROUND_BRACKET, ZsTypes.R_ROUND_BRACKET, true), - new BracePair(ZsTypes.L_ANGLE_BRACKET, ZsTypes.R_ANGLE_BRACKET, true), - new BracePair(ZsTypes.L_SQUARE_BRACKET, ZsTypes.R_SQUARE_BRACKET, true), - new BracePair(ZsTypes.L_CURLY_BRACKET, ZsTypes.R_CURLY_BRACKET, true), + new BracePair(ZsTypes.L_ROUND_BRACKET, ZsTypes.R_ROUND_BRACKET, false), + new BracePair(ZsTypes.L_ANGLE_BRACKET, ZsTypes.R_ANGLE_BRACKET, false), + new BracePair(ZsTypes.L_SQUARE_BRACKET, ZsTypes.R_SQUARE_BRACKET, false), + new BracePair(ZsTypes.L_CURLY_BRACKET, ZsTypes.R_CURLY_BRACKET, false), }; } diff --git a/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsSyntaxHighlighter.java b/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsSyntaxHighlighter.java index ae2a98b..96ae300 100644 --- a/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsSyntaxHighlighter.java +++ b/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsSyntaxHighlighter.java @@ -23,7 +23,7 @@ public class ZsSyntaxHighlighter extends SyntaxHighlighterBase { public static final TextAttributesKey SEPARATOR = createTextAttributesKey("ZS_SEPARATOR", DefaultLanguageHighlighterColors.OPERATION_SIGN); public static final TextAttributesKey KEYWORD = createTextAttributesKey("ZS_KEY", DefaultLanguageHighlighterColors.KEYWORD); - public static final TextAttributesKey VARIABLE = createTextAttributesKey("ZS_VARIABLE", DefaultLanguageHighlighterColors.KEYWORD); //TODO: set back to right name + public static final TextAttributesKey VARIABLE = createTextAttributesKey("ZS_VARIABLE", DefaultLanguageHighlighterColors.LOCAL_VARIABLE); //TODO: set back to right name public static final TextAttributesKey COMMENT = createTextAttributesKey("ZS_COMMENT", DefaultLanguageHighlighterColors.LINE_COMMENT); public static final TextAttributesKey BAD_CHARACTER = createTextAttributesKey("ZS_BAD_CHARACTER", HighlighterColors.BAD_CHARACTER); public static final TextAttributesKey STRING = createTextAttributesKey("ZS_STRING", DefaultLanguageHighlighterColors.STRING); @@ -51,21 +51,28 @@ public Lexer getHighlightingLexer() { public TextAttributesKey[] getTokenHighlights(IElementType tokenType) { if (tokenType.equals(ZsTypes.VARIABLE)) { return VARIABLE_KEYS; - } else if (isKeyword(tokenType)) { + } + if (isKeyword(tokenType)) { return KEYWORD_KEYS; - } else if (tokenType.equals(ZsTypes.DOUBLE_QUOTED_STRING) | tokenType.equals(ZsTypes.SINGLE_QUOTED_STRING)) { + } + if (tokenType.equals(ZsTypes.DOUBLE_QUOTED_STRING) | tokenType.equals(ZsTypes.SINGLE_QUOTED_STRING)) { return STRING_KEYS; - } else if (tokenType.equals(ZsTypes.LINE_COMMENT) || tokenType.equals(ZsTypes.BLOCK_COMMENT)) { + } + if (tokenType.equals(ZsTypes.LINE_COMMENT) || tokenType.equals(ZsTypes.BLOCK_COMMENT)) { return COMMENT_KEYS; - } else if (tokenType.equals(TokenType.BAD_CHARACTER)) { + } + if (tokenType.equals(TokenType.BAD_CHARACTER)) { return BAD_CHAR_KEYS; - } else if (isNumber(tokenType)){ + } + if (isNumber(tokenType)){ return NUMBER_KEYS; - } else if (tokenType.equals(ZsTypes.BRACKET_HANDLER)){ + } + if (tokenType.equals(ZsTypes.BRACKET_HANDLER)){ return BRACKET_HANDLER_KEYS; - } else if (tokenType.equals(ZsTypes.IDENTIFIER)){ - return VARIABLE_KEYS; } + /* if (tokenType.equals(ZsTypes.IDENTIFIER)){ + return VARIABLE_KEYS; + }*/ return EMPTY_KEYS; } diff --git a/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsTypes_old.java b/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsTypes_old.java deleted file mode 100644 index 5bcc282..0000000 --- a/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/formatter/ZsTypes_old.java +++ /dev/null @@ -1,61 +0,0 @@ -package de.bloodworkxgaming.zenscript.plugin.zsLanguage.formatter; - -import com.intellij.psi.tree.IElementType; -import com.intellij.psi.tree.TokenSet; -import de.bloodworkxgaming.zenscript.plugin.zsLanguage.ZsLanguage; - -public class ZsTypes_old { - /** - * Normal ElementTypes - */ - public static final IElementType IDENTIFIER = new IElementType("IDENTIFIER", ZsLanguage.INSTANCE); - public static final IElementType INTEGER_LITERAL = new IElementType("INTEGER_LITERAL", ZsLanguage.INSTANCE); - - public static final IElementType WHITESPACE = new IElementType("WHITESPACE", ZsLanguage.INSTANCE); - - /** - * Braces - */ - public static final IElementType L_ROUND_BRACKET = new IElementType("L_ROUND_BRACKET", ZsLanguage.INSTANCE); - public static final IElementType R_ROUND_BRACKET = new IElementType("R_ROUND_BRACKET", ZsLanguage.INSTANCE); - - public static final IElementType L_ANGLE_BRACKET = new IElementType("L_ANGLE_BRACKET", ZsLanguage.INSTANCE); - public static final IElementType R_ANGLE_BRACKET = new IElementType("R_ANGLE_BRACKET", ZsLanguage.INSTANCE); - - public static final IElementType L_SQUARE_BRACKET = new IElementType("L_SQUARE_BRACKET", ZsLanguage.INSTANCE); - public static final IElementType R_SQUARE_BRACKET = new IElementType("R_SQUARE_BRACKET", ZsLanguage.INSTANCE); - - public static final IElementType L_SWIRL_BRACKET = new IElementType("L_SWIRL_BRACKET", ZsLanguage.INSTANCE); - public static final IElementType R_SWIRL_BRACKET = new IElementType("R_SWIRL_BRACKET", ZsLanguage.INSTANCE); - - /** - * Operators - */ - public static final IElementType EQ = new IElementType("EQ", ZsLanguage.INSTANCE); - public static final IElementType EQEQ = new IElementType("EQEQ", ZsLanguage.INSTANCE); - public static final IElementType PLUS = new IElementType("PLUS", ZsLanguage.INSTANCE); - - /** - * Keywords - */ - public static final IElementType BOOLEAN = new IElementType("BOOLEAN", ZsLanguage.INSTANCE); - public static final IElementType BREAK = new IElementType("BREAK", ZsLanguage.INSTANCE); - - - /** - * Comment types - */ - public static final IElementType C_STYLE_COMMENT = new IElementType("C_STYLE_COMMENT", ZsLanguage.INSTANCE); - public static final IElementType END_OF_LINE_COMMENT = new IElementType("END_OF_LINE_COMMENT", ZsLanguage.INSTANCE); - public static final IElementType DOC_COMMENT = new IElementType("DOC_COMMENT", ZsLanguage.INSTANCE); - - - /** - * TokenSets - */ - public static final TokenSet WHITESPACE_SET = TokenSet.create(WHITESPACE); - public static final TokenSet JAVA_PLAIN_COMMENT_BIT_SET = TokenSet.create(END_OF_LINE_COMMENT, C_STYLE_COMMENT); - public static final TokenSet JAVA_COMMENT_BIT_SET = TokenSet.orSet(JAVA_PLAIN_COMMENT_BIT_SET, TokenSet.create(DOC_COMMENT)); - - -} diff --git a/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/parsing/ZsParserUtil.java b/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/parsing/ZsParserUtil.java new file mode 100644 index 0000000..4ebe8f3 --- /dev/null +++ b/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/parsing/ZsParserUtil.java @@ -0,0 +1,6 @@ +package de.bloodworkxgaming.zenscript.plugin.zsLanguage.parsing; + +import com.intellij.lang.parser.GeneratedParserUtilBase; + +public class ZsParserUtil extends GeneratedParserUtilBase { +} diff --git a/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZenScript.bnf b/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZenScript.bnf index def5845..d176e4e 100644 --- a/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZenScript.bnf +++ b/src/de/bloodworkxgaming/zenscript/plugin/zsLanguage/psi/ZenScript.bnf @@ -1,5 +1,6 @@ { parserClass="de.bloodworkxgaming.zenscript.plugin.zsLanguage.parsing.ZsParser" + parserUtilClass="de.bloodworkxgaming.zenscript.plugin.zsLanguage.parsing.ZsParserUtil" extends="com.intellij.extapi.psi.ASTWrapperPsiElement" @@ -97,10 +98,13 @@ ] } -zsFile ::= import_list (statement | function_declaration )* +zsFile ::= preprocessor_list? import_list (statement | function_declaration )* // private item_ ::= +preprocessor_list ::= preprocessor* +preprocessor ::= HASH IDENTIFIER* + import_list ::= import_statement* import_statement ::= IMPORT IDENTIFIER (DOT IDENTIFIER)* SEMICOLON @@ -109,7 +113,10 @@ statement ::= assignStatement SEMICOLON | EOL | functionCall SEMICOLON | for_loop - | if_statement + | if_statement /*{recoverWhile=statement_recover}*/ + +private statement_recover ::= SEMICOLON + bracketHandler ::= L_ANGLE_BRACKET (IDENTIFIER | COLON | DIGITS | ASTERISK)* R_ANGLE_BRACKET @@ -120,6 +127,7 @@ class_name ::= IDENTIFIER (L_SQUARE_BRACKET R_SQUARE_BRACKET)* number ::= DIGITS | FLOATING_POINT + validVariable ::= lambda_function_declaration | castExpression | equation @@ -133,6 +141,9 @@ validVariable ::= lambda_function_declaration | SINGLE_QUOTED_STRING | arrayDeclaration | arrayRead + | moduloType + | TRUE + | FALSE validCallable ::= bracketHandler | variable @@ -140,24 +151,27 @@ validCallable ::= bracketHandler | SINGLE_QUOTED_STRING | arrayRead -field_reference ::= validCallable (DOT IDENTIFIER)+ +field_reference ::= validCallable (DOT IDENTIFIER)* + +moduloType ::= (bracketHandler | variable)PERC DIGITS assignStatement ::= (VAR | VAL)? field_reference EQUAL validVariable /*{mixin= "de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.impl.ZsNamedElementImpl" implements= "de.bloodworkxgaming.zenscript.plugin.zsLanguage.psi.impl.ZsNamedElementImpl" methods=[getVariableName getNameIdentifier setVariableName]}*/ -functionCall ::= validCallable (DOT IDENTIFIER)* (L_ROUND_BRACKET R_ROUND_BRACKET | (L_ROUND_BRACKET (validVariable (COMMA validVariable)*) R_ROUND_BRACKET)) +functionCall ::= validCallable ((DOT IDENTIFIER)* (L_ROUND_BRACKET R_ROUND_BRACKET | (L_ROUND_BRACKET (validVariable (COMMA validVariable)*) R_ROUND_BRACKET)))+ arrayDeclaration ::= L_SQUARE_BRACKET validVariable (COMMA validVariable)* R_SQUARE_BRACKET arrayRead ::= IDENTIFIER (DOT IDENTIFIER)* (L_SQUARE_BRACKET DIGITS R_SQUARE_BRACKET)+ castExpression ::= (arrayDeclaration | IDENTIFIER | bracketHandler) AS class_name -statement_body ::= L_CURLY_BRACKET statement* R_CURLY_BRACKET +// CONTROL STATEMENTS +statement_body ::= (L_CURLY_BRACKET statement* R_CURLY_BRACKET | function_body) return_statement ::= RETURN validVariable SEMICOLON for_loop ::= FOR (((variable COMMA)? variable in variable) | (variable IN DIGITS ((DOT DOT) | TO) DIGITS)) statement_body -condition ::= validVariable (EQEQ | NOT_EQUAL | GREATER_EQUAL | LESS_EQUAL | L_ANGLE_BRACKET | R_ANGLE_BRACKET) validVariable +condition ::= validVariable ((EQEQ | NOT_EQUAL | GREATER_EQUAL | LESS_EQUAL | L_ANGLE_BRACKET | R_ANGLE_BRACKET) validVariable)* if_statement ::= IF L_ROUND_BRACKET condition ((OR | AND | XOR) condition)* R_ROUND_BRACKET statement_body (ELSE statement_body)?