diff --git a/.gitignore b/.gitignore index b6d73a68..eb014e03 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,3 @@ hs_err_pid* *.iml **/.gradle build -src/gen diff --git a/build.gradle.kts b/build.gradle.kts index d0152080..6f954a2a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -65,11 +65,12 @@ grammarKit { grammarKitRelease = "2021.1.2" } +val lexerSource = layout.buildDirectory.dir("generated/sources/lexer/java/main") sourceSets { main { java { - srcDir("src/gen/java") - srcDir("src/main/java") + srcDir(lexerSource) + srcDir(tasks.generateParser) } } } @@ -104,23 +105,24 @@ tasks { } generateLexer { - sourceFile = file("src/main/lang/Nix.flex") - targetOutputDir = file("src/gen/java/org/nixos/idea/lang") + sourceFile = layout.projectDirectory.file("src/main/lang/Nix.flex") + targetOutputDir = lexerSource.map { it.dir("org/nixos/idea/lang") } purgeOldFiles = true } generateParser { - sourceFile = file("src/main/lang/Nix.bnf") - targetRootOutputDir = file("src/gen/java") - pathToParser = "/org/nixos/idea/lang/NixParser" - pathToPsiRoot = "/org/nixos/idea/psi" + sourceFile = layout.projectDirectory.file("src/main/lang/Nix.bnf") + targetRootOutputDir = layout.buildDirectory.dir("generated/sources/parser/java/main") + // Maybe we can remove the following properties in the future + // https://github.com/JetBrains/gradle-grammar-kit-plugin/issues/178 + pathToParser = "org/nixos/idea/lang/NixParser.java" + pathToPsiRoot = "org/nixos/idea/psi" purgeOldFiles = true - // Task :generateLexer deletes files generated by this task when executed afterward. - mustRunAfter(generateLexer) } compileJava { - dependsOn(generateLexer, generateParser) + dependsOn(generateLexer) + // dependency to generateParser is implicitly detected by Gradle } test { diff --git a/src/main/lang/Nix.flex b/src/main/lang/Nix.flex index 201a4004..af5107e6 100644 --- a/src/main/lang/Nix.flex +++ b/src/main/lang/Nix.flex @@ -38,6 +38,7 @@ import static org.nixos.idea.psi.NixTypes.*; } %} +%abstract %class _NixLexer %implements FlexLexer %function advance