add jflex
This commit is contained in:
		
							parent
							
								
									29232018e5
								
							
						
					
					
						commit
						df7b96b39d
					
				
							
								
								
									
										37
									
								
								.run/Run Plugin.run.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								.run/Run Plugin.run.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | |||||||
|  | <component name="ProjectRunConfigurationManager"> | ||||||
|  |   <configuration default="false" name="Run Plugin" type="GradleRunConfiguration" factoryName="Gradle"> | ||||||
|  |     <log_file alias="idea.log" path="$PROJECT_DIR$/build/idea-sandbox/system/log/idea.log" /> | ||||||
|  |     <ExternalSystemSettings> | ||||||
|  |       <option name="executionName" /> | ||||||
|  |       <option name="externalProjectPath" value="$PROJECT_DIR$" /> | ||||||
|  |       <option name="externalSystemIdString" value="GRADLE" /> | ||||||
|  |       <option name="scriptParameters" value="" /> | ||||||
|  |       <option name="taskDescriptions"> | ||||||
|  |         <list /> | ||||||
|  |       </option> | ||||||
|  |       <option name="taskNames"> | ||||||
|  |         <list> | ||||||
|  |           <option value="runIde" /> | ||||||
|  |         </list> | ||||||
|  |       </option> | ||||||
|  |       <option name="vmOptions" value="" /> | ||||||
|  |     </ExternalSystemSettings> | ||||||
|  |     <ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess> | ||||||
|  |     <ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess> | ||||||
|  |     <EXTENSION ID="com.intellij.execution.ExternalSystemRunConfigurationJavaExtension"> | ||||||
|  |       <extension name="net.ashald.envfile"> | ||||||
|  |         <option name="IS_ENABLED" value="false" /> | ||||||
|  |         <option name="IS_SUBST" value="false" /> | ||||||
|  |         <option name="IS_PATH_MACRO_SUPPORTED" value="false" /> | ||||||
|  |         <option name="IS_IGNORE_MISSING_FILES" value="false" /> | ||||||
|  |         <option name="IS_ENABLE_EXPERIMENTAL_INTEGRATIONS" value="false" /> | ||||||
|  |         <ENTRIES> | ||||||
|  |           <ENTRY IS_ENABLED="true" PARSER="runconfig" IS_EXECUTABLE="false" /> | ||||||
|  |         </ENTRIES> | ||||||
|  |       </extension> | ||||||
|  |     </EXTENSION> | ||||||
|  |     <DebugAllEnabled>false</DebugAllEnabled> | ||||||
|  |     <RunAsTest>false</RunAsTest> | ||||||
|  |     <method v="2" /> | ||||||
|  |   </configuration> | ||||||
|  | </component> | ||||||
| @ -1,7 +1,7 @@ | |||||||
| plugins { | plugins { | ||||||
|     id("java") |     id("java") | ||||||
|     id("org.jetbrains.kotlin.jvm") version "1.9.21" |     id("org.jetbrains.kotlin.jvm") version "1.9.21" | ||||||
|     id("org.jetbrains.intellij") version "1.16.1" |     id("org.jetbrains.intellij") version "1.17.3" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| group = "ru.crabs" | group = "ru.crabs" | ||||||
| @ -14,7 +14,9 @@ repositories { | |||||||
| // Include the generated files in the source set | // Include the generated files in the source set | ||||||
| sourceSets { | sourceSets { | ||||||
|     main { |     main { | ||||||
|         kotlin.srcDirs("src/main/gen") |         java { | ||||||
|  |             srcDirs("src/main/gen") | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -24,17 +26,17 @@ intellij { | |||||||
|     version.set("2023.1.5") |     version.set("2023.1.5") | ||||||
|     type.set("IC") // Target IDE Platform |     type.set("IC") // Target IDE Platform | ||||||
| 
 | 
 | ||||||
|     plugins.set(listOf(/* Plugin Dependencies */)) |     plugins.set(listOf("com.intellij.java")) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| tasks { | tasks { | ||||||
|     // Set the JVM compatibility versions |     // Set the JVM compatibility versions | ||||||
|     withType<JavaCompile> { |     withType<JavaCompile> { | ||||||
|         sourceCompatibility = "17" |         sourceCompatibility = "11" | ||||||
|         targetCompatibility = "17" |         targetCompatibility = "11" | ||||||
|     } |     } | ||||||
|     withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { |     withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { | ||||||
|         kotlinOptions.jvmTarget = "17" |         kotlinOptions.jvmTarget = "11" | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     patchPluginXml { |     patchPluginXml { | ||||||
| @ -42,12 +44,6 @@ tasks { | |||||||
|         untilBuild.set("241.*") |         untilBuild.set("241.*") | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     signPlugin { |  | ||||||
|         certificateChain.set(System.getenv("CERTIFICATE_CHAIN")) |  | ||||||
|         privateKey.set(System.getenv("PRIVATE_KEY")) |  | ||||||
|         password.set(System.getenv("PRIVATE_KEY_PASSWORD")) |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     publishPlugin { |     publishPlugin { | ||||||
|         token.set(System.getenv("PUBLISH_TOKEN")) |         token.set(System.getenv("PUBLISH_TOKEN")) | ||||||
|     } |     } | ||||||
|  | |||||||
							
								
								
									
										185
									
								
								gen/ru/crabs/sdk/language/parser/SJsonParser.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								gen/ru/crabs/sdk/language/parser/SJsonParser.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,185 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.parser; | ||||||
|  | 
 | ||||||
|  | import com.intellij.lang.PsiBuilder; | ||||||
|  | import com.intellij.lang.PsiBuilder.Marker; | ||||||
|  | import static ru.crabs.sdk.language.psi.SJsonTypes.*; | ||||||
|  | import static com.intellij.lang.parser.GeneratedParserUtilBase.*; | ||||||
|  | import com.intellij.psi.tree.IElementType; | ||||||
|  | import com.intellij.lang.ASTNode; | ||||||
|  | import com.intellij.psi.tree.TokenSet; | ||||||
|  | import com.intellij.lang.PsiParser; | ||||||
|  | import com.intellij.lang.LightPsiParser; | ||||||
|  | 
 | ||||||
|  | @SuppressWarnings({"SimplifiableIfStatement", "UnusedAssignment"}) | ||||||
|  | public class SJsonParser implements PsiParser, LightPsiParser { | ||||||
|  | 
 | ||||||
|  |   public ASTNode parse(IElementType t, PsiBuilder b) { | ||||||
|  |     parseLight(t, b); | ||||||
|  |     return b.getTreeBuilt(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void parseLight(IElementType t, PsiBuilder b) { | ||||||
|  |     boolean r; | ||||||
|  |     b = adapt_builder_(t, b, this, null); | ||||||
|  |     Marker m = enter_section_(b, 0, _COLLAPSE_, null); | ||||||
|  |     r = parse_root_(t, b); | ||||||
|  |     exit_section_(b, 0, m, t, r, true, TRUE_CONDITION); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   protected boolean parse_root_(IElementType t, PsiBuilder b) { | ||||||
|  |     return parse_root_(t, b, 0); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   static boolean parse_root_(IElementType t, PsiBuilder b, int l) { | ||||||
|  |     return root(b, l + 1); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* ********************************************************** */ | ||||||
|  |   // "[" (item ",")* item "]" | ||||||
|  |   public static boolean array(PsiBuilder b, int l) { | ||||||
|  |     if (!recursion_guard_(b, l, "array")) return false; | ||||||
|  |     boolean r; | ||||||
|  |     Marker m = enter_section_(b, l, _NONE_, ARRAY, "<array>"); | ||||||
|  |     r = consumeToken(b, "["); | ||||||
|  |     r = r && array_1(b, l + 1); | ||||||
|  |     r = r && item(b, l + 1); | ||||||
|  |     r = r && consumeToken(b, "]"); | ||||||
|  |     exit_section_(b, l, m, r, false, null); | ||||||
|  |     return r; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // (item ",")* | ||||||
|  |   private static boolean array_1(PsiBuilder b, int l) { | ||||||
|  |     if (!recursion_guard_(b, l, "array_1")) return false; | ||||||
|  |     while (true) { | ||||||
|  |       int c = current_position_(b); | ||||||
|  |       if (!array_1_0(b, l + 1)) break; | ||||||
|  |       if (!empty_element_parsed_guard_(b, "array_1", c)) break; | ||||||
|  |     } | ||||||
|  |     return true; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // item "," | ||||||
|  |   private static boolean array_1_0(PsiBuilder b, int l) { | ||||||
|  |     if (!recursion_guard_(b, l, "array_1_0")) return false; | ||||||
|  |     boolean r; | ||||||
|  |     Marker m = enter_section_(b); | ||||||
|  |     r = item(b, l + 1); | ||||||
|  |     r = r && consumeToken(b, ","); | ||||||
|  |     exit_section_(b, m, null, r); | ||||||
|  |     return r; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* ********************************************************** */ | ||||||
|  |   // object | array | var | string | number | ||||||
|  |   public static boolean item(PsiBuilder b, int l) { | ||||||
|  |     if (!recursion_guard_(b, l, "item")) return false; | ||||||
|  |     boolean r; | ||||||
|  |     Marker m = enter_section_(b, l, _NONE_, ITEM, "<item>"); | ||||||
|  |     r = object(b, l + 1); | ||||||
|  |     if (!r) r = array(b, l + 1); | ||||||
|  |     if (!r) r = var(b, l + 1); | ||||||
|  |     if (!r) r = consumeToken(b, STRING); | ||||||
|  |     if (!r) r = consumeToken(b, NUMBER); | ||||||
|  |     exit_section_(b, l, m, r, false, null); | ||||||
|  |     return r; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* ********************************************************** */ | ||||||
|  |   // var ":" item | ||||||
|  |   public static boolean mixin(PsiBuilder b, int l) { | ||||||
|  |     if (!recursion_guard_(b, l, "mixin")) return false; | ||||||
|  |     boolean r; | ||||||
|  |     Marker m = enter_section_(b, l, _NONE_, MIXIN, "<mixin>"); | ||||||
|  |     r = var(b, l + 1); | ||||||
|  |     r = r && consumeToken(b, ":"); | ||||||
|  |     r = r && item(b, l + 1); | ||||||
|  |     exit_section_(b, l, m, r, false, null); | ||||||
|  |     return r; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* ********************************************************** */ | ||||||
|  |   // "{" (prop ",")* prop "}" | ||||||
|  |   public static boolean object(PsiBuilder b, int l) { | ||||||
|  |     if (!recursion_guard_(b, l, "object")) return false; | ||||||
|  |     boolean r; | ||||||
|  |     Marker m = enter_section_(b, l, _NONE_, OBJECT, "<object>"); | ||||||
|  |     r = consumeToken(b, "{"); | ||||||
|  |     r = r && object_1(b, l + 1); | ||||||
|  |     r = r && prop(b, l + 1); | ||||||
|  |     r = r && consumeToken(b, "}"); | ||||||
|  |     exit_section_(b, l, m, r, false, null); | ||||||
|  |     return r; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // (prop ",")* | ||||||
|  |   private static boolean object_1(PsiBuilder b, int l) { | ||||||
|  |     if (!recursion_guard_(b, l, "object_1")) return false; | ||||||
|  |     while (true) { | ||||||
|  |       int c = current_position_(b); | ||||||
|  |       if (!object_1_0(b, l + 1)) break; | ||||||
|  |       if (!empty_element_parsed_guard_(b, "object_1", c)) break; | ||||||
|  |     } | ||||||
|  |     return true; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // prop "," | ||||||
|  |   private static boolean object_1_0(PsiBuilder b, int l) { | ||||||
|  |     if (!recursion_guard_(b, l, "object_1_0")) return false; | ||||||
|  |     boolean r; | ||||||
|  |     Marker m = enter_section_(b); | ||||||
|  |     r = prop(b, l + 1); | ||||||
|  |     r = r && consumeToken(b, ","); | ||||||
|  |     exit_section_(b, m, null, r); | ||||||
|  |     return r; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* ********************************************************** */ | ||||||
|  |   // string ":" item | ||||||
|  |   public static boolean pair(PsiBuilder b, int l) { | ||||||
|  |     if (!recursion_guard_(b, l, "pair")) return false; | ||||||
|  |     if (!nextTokenIs(b, STRING)) return false; | ||||||
|  |     boolean r; | ||||||
|  |     Marker m = enter_section_(b); | ||||||
|  |     r = consumeToken(b, STRING); | ||||||
|  |     r = r && consumeToken(b, ":"); | ||||||
|  |     r = r && item(b, l + 1); | ||||||
|  |     exit_section_(b, m, PAIR, r); | ||||||
|  |     return r; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* ********************************************************** */ | ||||||
|  |   // pair | mixin | ||||||
|  |   public static boolean prop(PsiBuilder b, int l) { | ||||||
|  |     if (!recursion_guard_(b, l, "prop")) return false; | ||||||
|  |     boolean r; | ||||||
|  |     Marker m = enter_section_(b, l, _NONE_, PROP, "<prop>"); | ||||||
|  |     r = pair(b, l + 1); | ||||||
|  |     if (!r) r = mixin(b, l + 1); | ||||||
|  |     exit_section_(b, l, m, r, false, null); | ||||||
|  |     return r; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* ********************************************************** */ | ||||||
|  |   // object | COMMENT | ||||||
|  |   static boolean root(PsiBuilder b, int l) { | ||||||
|  |     if (!recursion_guard_(b, l, "root")) return false; | ||||||
|  |     boolean r; | ||||||
|  |     r = object(b, l + 1); | ||||||
|  |     if (!r) r = consumeToken(b, COMMENT); | ||||||
|  |     return r; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* ********************************************************** */ | ||||||
|  |   // "regexp:\"$[^\"]*\"" | ||||||
|  |   public static boolean var(PsiBuilder b, int l) { | ||||||
|  |     if (!recursion_guard_(b, l, "var")) return false; | ||||||
|  |     boolean r; | ||||||
|  |     Marker m = enter_section_(b, l, _NONE_, VAR, "<var>"); | ||||||
|  |     r = consumeToken(b, "regexp:\"$[^\"]*\""); | ||||||
|  |     exit_section_(b, l, m, r, false, null); | ||||||
|  |     return r; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										13
									
								
								gen/ru/crabs/sdk/language/psi/SJsonArray.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								gen/ru/crabs/sdk/language/psi/SJsonArray.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.psi; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | import org.jetbrains.annotations.*; | ||||||
|  | import com.intellij.psi.PsiElement; | ||||||
|  | 
 | ||||||
|  | public interface SJsonArray extends PsiElement { | ||||||
|  | 
 | ||||||
|  |   @NotNull | ||||||
|  |   List<SJsonItem> getItemList(); | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										25
									
								
								gen/ru/crabs/sdk/language/psi/SJsonItem.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								gen/ru/crabs/sdk/language/psi/SJsonItem.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.psi; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | import org.jetbrains.annotations.*; | ||||||
|  | import com.intellij.psi.PsiElement; | ||||||
|  | 
 | ||||||
|  | public interface SJsonItem extends PsiElement { | ||||||
|  | 
 | ||||||
|  |   @Nullable | ||||||
|  |   SJsonArray getArray(); | ||||||
|  | 
 | ||||||
|  |   @Nullable | ||||||
|  |   SJsonObject getObject(); | ||||||
|  | 
 | ||||||
|  |   @Nullable | ||||||
|  |   SJsonVar getVar(); | ||||||
|  | 
 | ||||||
|  |   @Nullable | ||||||
|  |   PsiElement getNumber(); | ||||||
|  | 
 | ||||||
|  |   @Nullable | ||||||
|  |   PsiElement getString(); | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										16
									
								
								gen/ru/crabs/sdk/language/psi/SJsonMixin.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								gen/ru/crabs/sdk/language/psi/SJsonMixin.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.psi; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | import org.jetbrains.annotations.*; | ||||||
|  | import com.intellij.psi.PsiElement; | ||||||
|  | 
 | ||||||
|  | public interface SJsonMixin extends PsiElement { | ||||||
|  | 
 | ||||||
|  |   @NotNull | ||||||
|  |   SJsonItem getItem(); | ||||||
|  | 
 | ||||||
|  |   @NotNull | ||||||
|  |   SJsonVar getVar(); | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										13
									
								
								gen/ru/crabs/sdk/language/psi/SJsonObject.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								gen/ru/crabs/sdk/language/psi/SJsonObject.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.psi; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | import org.jetbrains.annotations.*; | ||||||
|  | import com.intellij.psi.PsiElement; | ||||||
|  | 
 | ||||||
|  | public interface SJsonObject extends PsiElement { | ||||||
|  | 
 | ||||||
|  |   @NotNull | ||||||
|  |   List<SJsonProp> getPropList(); | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										16
									
								
								gen/ru/crabs/sdk/language/psi/SJsonPair.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								gen/ru/crabs/sdk/language/psi/SJsonPair.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.psi; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | import org.jetbrains.annotations.*; | ||||||
|  | import com.intellij.psi.PsiElement; | ||||||
|  | 
 | ||||||
|  | public interface SJsonPair extends PsiElement { | ||||||
|  | 
 | ||||||
|  |   @NotNull | ||||||
|  |   SJsonItem getItem(); | ||||||
|  | 
 | ||||||
|  |   @NotNull | ||||||
|  |   PsiElement getString(); | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										16
									
								
								gen/ru/crabs/sdk/language/psi/SJsonProp.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								gen/ru/crabs/sdk/language/psi/SJsonProp.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.psi; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | import org.jetbrains.annotations.*; | ||||||
|  | import com.intellij.psi.PsiElement; | ||||||
|  | 
 | ||||||
|  | public interface SJsonProp extends PsiElement { | ||||||
|  | 
 | ||||||
|  |   @Nullable | ||||||
|  |   SJsonMixin getMixin(); | ||||||
|  | 
 | ||||||
|  |   @Nullable | ||||||
|  |   SJsonPair getPair(); | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										51
									
								
								gen/ru/crabs/sdk/language/psi/SJsonTypes.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								gen/ru/crabs/sdk/language/psi/SJsonTypes.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,51 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.psi; | ||||||
|  | 
 | ||||||
|  | import com.intellij.psi.tree.IElementType; | ||||||
|  | import com.intellij.psi.PsiElement; | ||||||
|  | import com.intellij.lang.ASTNode; | ||||||
|  | import ru.crabs.sdk.language.psi.impl.*; | ||||||
|  | 
 | ||||||
|  | public interface SJsonTypes { | ||||||
|  | 
 | ||||||
|  |   IElementType ARRAY = new SJsonElementType("ARRAY"); | ||||||
|  |   IElementType ITEM = new SJsonElementType("ITEM"); | ||||||
|  |   IElementType MIXIN = new SJsonElementType("MIXIN"); | ||||||
|  |   IElementType OBJECT = new SJsonElementType("OBJECT"); | ||||||
|  |   IElementType PAIR = new SJsonElementType("PAIR"); | ||||||
|  |   IElementType PROP = new SJsonElementType("PROP"); | ||||||
|  |   IElementType VAR = new SJsonElementType("VAR"); | ||||||
|  | 
 | ||||||
|  |   IElementType COMMENT = new SJsonTokenType("COMMENT"); | ||||||
|  |   IElementType NUMBER = new SJsonTokenType("number"); | ||||||
|  |   IElementType STRING = new SJsonTokenType("string"); | ||||||
|  |   IElementType VARS_WORD = new SJsonTokenType("@vars"); | ||||||
|  | 
 | ||||||
|  |   class Factory { | ||||||
|  |     public static PsiElement createElement(ASTNode node) { | ||||||
|  |       IElementType type = node.getElementType(); | ||||||
|  |       if (type == ARRAY) { | ||||||
|  |         return new SJsonArrayImpl(node); | ||||||
|  |       } | ||||||
|  |       else if (type == ITEM) { | ||||||
|  |         return new SJsonItemImpl(node); | ||||||
|  |       } | ||||||
|  |       else if (type == MIXIN) { | ||||||
|  |         return new SJsonMixinImpl(node); | ||||||
|  |       } | ||||||
|  |       else if (type == OBJECT) { | ||||||
|  |         return new SJsonObjectImpl(node); | ||||||
|  |       } | ||||||
|  |       else if (type == PAIR) { | ||||||
|  |         return new SJsonPairImpl(node); | ||||||
|  |       } | ||||||
|  |       else if (type == PROP) { | ||||||
|  |         return new SJsonPropImpl(node); | ||||||
|  |       } | ||||||
|  |       else if (type == VAR) { | ||||||
|  |         return new SJsonVarImpl(node); | ||||||
|  |       } | ||||||
|  |       throw new AssertionError("Unknown element type: " + type); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								gen/ru/crabs/sdk/language/psi/SJsonVar.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								gen/ru/crabs/sdk/language/psi/SJsonVar.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.psi; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | import org.jetbrains.annotations.*; | ||||||
|  | import com.intellij.psi.PsiElement; | ||||||
|  | 
 | ||||||
|  | public interface SJsonVar extends PsiElement { | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										42
									
								
								gen/ru/crabs/sdk/language/psi/SJsonVisitor.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								gen/ru/crabs/sdk/language/psi/SJsonVisitor.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.psi; | ||||||
|  | 
 | ||||||
|  | import org.jetbrains.annotations.*; | ||||||
|  | import com.intellij.psi.PsiElementVisitor; | ||||||
|  | import com.intellij.psi.PsiElement; | ||||||
|  | 
 | ||||||
|  | public class SJsonVisitor extends PsiElementVisitor { | ||||||
|  | 
 | ||||||
|  |   public void visitArray(@NotNull SJsonArray o) { | ||||||
|  |     visitPsiElement(o); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void visitItem(@NotNull SJsonItem o) { | ||||||
|  |     visitPsiElement(o); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void visitMixin(@NotNull SJsonMixin o) { | ||||||
|  |     visitPsiElement(o); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void visitObject(@NotNull SJsonObject o) { | ||||||
|  |     visitPsiElement(o); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void visitPair(@NotNull SJsonPair o) { | ||||||
|  |     visitPsiElement(o); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void visitProp(@NotNull SJsonProp o) { | ||||||
|  |     visitPsiElement(o); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void visitVar(@NotNull SJsonVar o) { | ||||||
|  |     visitPsiElement(o); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void visitPsiElement(@NotNull PsiElement o) { | ||||||
|  |     visitElement(o); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonArrayImpl.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonArrayImpl.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.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 ru.crabs.sdk.language.psi.SJsonTypes.*; | ||||||
|  | import com.intellij.extapi.psi.ASTWrapperPsiElement; | ||||||
|  | import ru.crabs.sdk.language.psi.*; | ||||||
|  | 
 | ||||||
|  | public class SJsonArrayImpl extends ASTWrapperPsiElement implements SJsonArray { | ||||||
|  | 
 | ||||||
|  |   public SJsonArrayImpl(@NotNull ASTNode node) { | ||||||
|  |     super(node); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void accept(@NotNull SJsonVisitor visitor) { | ||||||
|  |     visitor.visitArray(this); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   public void accept(@NotNull PsiElementVisitor visitor) { | ||||||
|  |     if (visitor instanceof SJsonVisitor) accept((SJsonVisitor)visitor); | ||||||
|  |     else super.accept(visitor); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   @NotNull | ||||||
|  |   public List<SJsonItem> getItemList() { | ||||||
|  |     return PsiTreeUtil.getChildrenOfTypeAsList(this, SJsonItem.class); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										60
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonItemImpl.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonItemImpl.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,60 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.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 ru.crabs.sdk.language.psi.SJsonTypes.*; | ||||||
|  | import com.intellij.extapi.psi.ASTWrapperPsiElement; | ||||||
|  | import ru.crabs.sdk.language.psi.*; | ||||||
|  | 
 | ||||||
|  | public class SJsonItemImpl extends ASTWrapperPsiElement implements SJsonItem { | ||||||
|  | 
 | ||||||
|  |   public SJsonItemImpl(@NotNull ASTNode node) { | ||||||
|  |     super(node); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void accept(@NotNull SJsonVisitor visitor) { | ||||||
|  |     visitor.visitItem(this); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   public void accept(@NotNull PsiElementVisitor visitor) { | ||||||
|  |     if (visitor instanceof SJsonVisitor) accept((SJsonVisitor)visitor); | ||||||
|  |     else super.accept(visitor); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   @Nullable | ||||||
|  |   public SJsonArray getArray() { | ||||||
|  |     return findChildByClass(SJsonArray.class); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   @Nullable | ||||||
|  |   public SJsonObject getObject() { | ||||||
|  |     return findChildByClass(SJsonObject.class); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   @Nullable | ||||||
|  |   public SJsonVar getVar() { | ||||||
|  |     return findChildByClass(SJsonVar.class); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   @Nullable | ||||||
|  |   public PsiElement getNumber() { | ||||||
|  |     return findChildByType(NUMBER); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   @Nullable | ||||||
|  |   public PsiElement getString() { | ||||||
|  |     return findChildByType(STRING); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										42
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonMixinImpl.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonMixinImpl.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.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 ru.crabs.sdk.language.psi.SJsonTypes.*; | ||||||
|  | import com.intellij.extapi.psi.ASTWrapperPsiElement; | ||||||
|  | import ru.crabs.sdk.language.psi.*; | ||||||
|  | 
 | ||||||
|  | public class SJsonMixinImpl extends ASTWrapperPsiElement implements SJsonMixin { | ||||||
|  | 
 | ||||||
|  |   public SJsonMixinImpl(@NotNull ASTNode node) { | ||||||
|  |     super(node); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void accept(@NotNull SJsonVisitor visitor) { | ||||||
|  |     visitor.visitMixin(this); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   public void accept(@NotNull PsiElementVisitor visitor) { | ||||||
|  |     if (visitor instanceof SJsonVisitor) accept((SJsonVisitor)visitor); | ||||||
|  |     else super.accept(visitor); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   @NotNull | ||||||
|  |   public SJsonItem getItem() { | ||||||
|  |     return findNotNullChildByClass(SJsonItem.class); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   @NotNull | ||||||
|  |   public SJsonVar getVar() { | ||||||
|  |     return findNotNullChildByClass(SJsonVar.class); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonObjectImpl.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonObjectImpl.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.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 ru.crabs.sdk.language.psi.SJsonTypes.*; | ||||||
|  | import com.intellij.extapi.psi.ASTWrapperPsiElement; | ||||||
|  | import ru.crabs.sdk.language.psi.*; | ||||||
|  | 
 | ||||||
|  | public class SJsonObjectImpl extends ASTWrapperPsiElement implements SJsonObject { | ||||||
|  | 
 | ||||||
|  |   public SJsonObjectImpl(@NotNull ASTNode node) { | ||||||
|  |     super(node); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void accept(@NotNull SJsonVisitor visitor) { | ||||||
|  |     visitor.visitObject(this); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   public void accept(@NotNull PsiElementVisitor visitor) { | ||||||
|  |     if (visitor instanceof SJsonVisitor) accept((SJsonVisitor)visitor); | ||||||
|  |     else super.accept(visitor); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   @NotNull | ||||||
|  |   public List<SJsonProp> getPropList() { | ||||||
|  |     return PsiTreeUtil.getChildrenOfTypeAsList(this, SJsonProp.class); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										42
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonPairImpl.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonPairImpl.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.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 ru.crabs.sdk.language.psi.SJsonTypes.*; | ||||||
|  | import com.intellij.extapi.psi.ASTWrapperPsiElement; | ||||||
|  | import ru.crabs.sdk.language.psi.*; | ||||||
|  | 
 | ||||||
|  | public class SJsonPairImpl extends ASTWrapperPsiElement implements SJsonPair { | ||||||
|  | 
 | ||||||
|  |   public SJsonPairImpl(@NotNull ASTNode node) { | ||||||
|  |     super(node); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void accept(@NotNull SJsonVisitor visitor) { | ||||||
|  |     visitor.visitPair(this); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   public void accept(@NotNull PsiElementVisitor visitor) { | ||||||
|  |     if (visitor instanceof SJsonVisitor) accept((SJsonVisitor)visitor); | ||||||
|  |     else super.accept(visitor); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   @NotNull | ||||||
|  |   public SJsonItem getItem() { | ||||||
|  |     return findNotNullChildByClass(SJsonItem.class); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   @NotNull | ||||||
|  |   public PsiElement getString() { | ||||||
|  |     return findNotNullChildByType(STRING); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										42
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonPropImpl.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonPropImpl.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.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 ru.crabs.sdk.language.psi.SJsonTypes.*; | ||||||
|  | import com.intellij.extapi.psi.ASTWrapperPsiElement; | ||||||
|  | import ru.crabs.sdk.language.psi.*; | ||||||
|  | 
 | ||||||
|  | public class SJsonPropImpl extends ASTWrapperPsiElement implements SJsonProp { | ||||||
|  | 
 | ||||||
|  |   public SJsonPropImpl(@NotNull ASTNode node) { | ||||||
|  |     super(node); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void accept(@NotNull SJsonVisitor visitor) { | ||||||
|  |     visitor.visitProp(this); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   public void accept(@NotNull PsiElementVisitor visitor) { | ||||||
|  |     if (visitor instanceof SJsonVisitor) accept((SJsonVisitor)visitor); | ||||||
|  |     else super.accept(visitor); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   @Nullable | ||||||
|  |   public SJsonMixin getMixin() { | ||||||
|  |     return findChildByClass(SJsonMixin.class); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   @Nullable | ||||||
|  |   public SJsonPair getPair() { | ||||||
|  |     return findChildByClass(SJsonPair.class); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										30
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonVarImpl.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								gen/ru/crabs/sdk/language/psi/impl/SJsonVarImpl.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | // This is a generated file. Not intended for manual editing. | ||||||
|  | package ru.crabs.sdk.language.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 ru.crabs.sdk.language.psi.SJsonTypes.*; | ||||||
|  | import com.intellij.extapi.psi.ASTWrapperPsiElement; | ||||||
|  | import ru.crabs.sdk.language.psi.*; | ||||||
|  | 
 | ||||||
|  | public class SJsonVarImpl extends ASTWrapperPsiElement implements SJsonVar { | ||||||
|  | 
 | ||||||
|  |   public SJsonVarImpl(@NotNull ASTNode node) { | ||||||
|  |     super(node); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void accept(@NotNull SJsonVisitor visitor) { | ||||||
|  |     visitor.visitVar(this); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Override | ||||||
|  |   public void accept(@NotNull PsiElementVisitor visitor) { | ||||||
|  |     if (visitor instanceof SJsonVisitor) accept((SJsonVisitor)visitor); | ||||||
|  |     else super.accept(visitor); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -1,6 +1,7 @@ | |||||||
| package ru.crabs.sjson | package ru.crabs.sdk.language.psi | ||||||
| 
 | 
 | ||||||
| import com.intellij.psi.tree.IElementType | import com.intellij.psi.tree.IElementType | ||||||
|  | import ru.crabs.sjson.SJsonLanguage | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class SJsonTokenType(debugName: String) : IElementType(debugName, SJsonLanguage.INSTANCE) { | class SJsonTokenType(debugName: String) : IElementType(debugName, SJsonLanguage.INSTANCE) { | ||||||
| @ -1,16 +1,19 @@ | |||||||
| { | { | ||||||
|   parserClass="ru.crabs.sjson.parser.SJsonParser" |   parserClass="ru.crabs.sdk.language.parser.SJsonParser" | ||||||
|  | //  parserUtilClass="com.intellij.lang.parser.GeneratedParserUtilBase" | ||||||
| 
 | 
 | ||||||
|   extends="com.intellij.extapi.psi.ASTWrapperPsiElement" |   extends="com.intellij.extapi.psi.ASTWrapperPsiElement" | ||||||
| 
 | 
 | ||||||
|   psiClassPrefix="SJson" |   psiClassPrefix="SJson" | ||||||
|   psiImplClassSuffix="Impl" |   psiImplClassSuffix="Impl" | ||||||
|   psiPackage="ru.crabs.sjson" |   psiPackage="ru.crabs.sdk.language.psi" | ||||||
|   psiImplPackage="ru.crabs.sjson.impl" |   psiImplPackage="ru.crabs.sdk.language.psi.impl" | ||||||
| 
 | 
 | ||||||
|   elementTypeHolderClass="ru.crabs.sjson.SJsonTypes" |   elementTypeHolderClass="ru.crabs.sdk.language.psi.SJsonTypes" | ||||||
|   elementTypeClass="ru.crabs.sjson.SJsonElementType" |   elementTypeClass="ru.crabs.sdk.language.psi.SJsonElementType" | ||||||
|   tokenTypeClass="ru.crabs.sjson.SJsonTokenType" |   tokenTypeClass="ru.crabs.sdk.language.psi.SJsonTokenType" | ||||||
|  | 
 | ||||||
|  |   psiImplUtilClass="ru.crabs.sdk.language.psi.impl.SJsonPsiImplUtil" | ||||||
| 
 | 
 | ||||||
|   tokens = [ |   tokens = [ | ||||||
|     space = 'regexp:\s+' |     space = 'regexp:\s+' | ||||||
| @ -21,7 +24,7 @@ | |||||||
|   ] |   ] | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| root ::= object | root ::= object | COMMENT // COMMENT = какой-то костыль и тут не нужен | ||||||
| 
 | 
 | ||||||
| object ::= "{" (prop ",")* prop "}" | object ::= "{" (prop ",")* prop "}" | ||||||
| array ::= "[" (item ",")* item "]" | array ::= "[" (item ",")* item "]" | ||||||
| @ -31,4 +34,4 @@ pair ::= string ":" item | |||||||
| mixin ::= var ":" item | mixin ::= var ":" item | ||||||
| 
 | 
 | ||||||
| item ::= (object | array | var | string | number) | item ::= (object | array | var | string | number) | ||||||
| var ::= "regexp:\"\$[^\"]*\"" | var ::= "regexp:\"$[^\"]*\"" | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ package ru.crabs.sjson.language; | |||||||
| 
 | 
 | ||||||
| import com.intellij.lexer.FlexLexer; | import com.intellij.lexer.FlexLexer; | ||||||
| import com.intellij.psi.tree.IElementType; | import com.intellij.psi.tree.IElementType; | ||||||
| import ru.crabs.sjson.SJsonTypes; | import ru.crabs.sdk.language.psi.SJsonTypes; | ||||||
| import com.intellij.psi.TokenType; | import com.intellij.psi.TokenType; | ||||||
| 
 | 
 | ||||||
| %% | %% | ||||||
|  | |||||||
| @ -0,0 +1,78 @@ | |||||||
|  | package ru.crabs.sjson.language | ||||||
|  | 
 | ||||||
|  | import com.intellij.extapi.psi.PsiFileBase | ||||||
|  | import com.intellij.lang.ASTNode | ||||||
|  | import com.intellij.lang.ParserDefinition | ||||||
|  | import com.intellij.lang.PsiParser | ||||||
|  | import com.intellij.lexer.FlexAdapter | ||||||
|  | import com.intellij.lexer.Lexer | ||||||
|  | import com.intellij.openapi.fileTypes.FileType | ||||||
|  | import com.intellij.openapi.project.Project | ||||||
|  | import com.intellij.psi.FileViewProvider | ||||||
|  | import com.intellij.psi.PsiElement | ||||||
|  | import com.intellij.psi.PsiFile | ||||||
|  | import com.intellij.psi.tree.IFileElementType | ||||||
|  | import com.intellij.psi.tree.TokenSet | ||||||
|  | import ru.crabs.sdk.language.parser.SJsonParser | ||||||
|  | import ru.crabs.sdk.language.psi.SJsonTypes | ||||||
|  | import ru.crabs.sjson.SJsonFileType | ||||||
|  | import ru.crabs.sjson.SJsonLanguage | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class SJsonLexerAdapter : FlexAdapter(SJsonLexer(null)) | ||||||
|  | 
 | ||||||
|  | class SJsonFile(viewProvider: FileViewProvider) : | ||||||
|  | 
 | ||||||
|  |     PsiFileBase(viewProvider, SJsonLanguage.INSTANCE) { | ||||||
|  | 
 | ||||||
|  |     override fun getFileType(): FileType { | ||||||
|  |         return SJsonFileType.INSTANCE | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     override fun toString(): String { | ||||||
|  |         return "SJson File" | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | interface SJsonTokenSets { | ||||||
|  |     companion object { | ||||||
|  |         val VARS_WORD: TokenSet = TokenSet.create(SJsonTypes.VARS_WORD) | ||||||
|  | 
 | ||||||
|  |         var COMMENTS: TokenSet = TokenSet.create(SJsonTypes.COMMENT) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | internal class SJsonParserDefinition : ParserDefinition { | ||||||
|  | 
 | ||||||
|  |     override fun createLexer(project: Project?): Lexer { | ||||||
|  |         return SJsonLexerAdapter() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     override fun getCommentTokens(): TokenSet { | ||||||
|  |         return SJsonTokenSets.COMMENTS | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     override fun getStringLiteralElements(): TokenSet { | ||||||
|  |         return TokenSet.EMPTY | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     override fun createParser(project: Project?): PsiParser { | ||||||
|  |         return SJsonParser() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     override fun getFileNodeType(): IFileElementType { | ||||||
|  |         return FILE | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     override fun createFile(viewProvider: FileViewProvider): PsiFile { | ||||||
|  |         return SJsonFile(viewProvider) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     override fun createElement(node: ASTNode?): PsiElement { | ||||||
|  |         return SJsonTypes.Factory.createElement(node) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     companion object { | ||||||
|  |         val FILE: IFileElementType = IFileElementType(SJsonLanguage.INSTANCE) | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -29,5 +29,8 @@ | |||||||
|                 fieldName="INSTANCE" |                 fieldName="INSTANCE" | ||||||
|                 language="SJson" |                 language="SJson" | ||||||
|                 extensions="sjson"/> |                 extensions="sjson"/> | ||||||
|  |         <lang.parserDefinition | ||||||
|  |             language="SJson" | ||||||
|  |             implementationClass="ru.crabs.sjson.language.SJsonParserDefinition"/> | ||||||
|     </extensions> |     </extensions> | ||||||
| </idea-plugin> | </idea-plugin> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user