Skip to content

Commit

Permalink
Removed global params
Browse files Browse the repository at this point in the history
  • Loading branch information
hurricup committed Apr 30, 2017
1 parent 354bb8c commit d7ce81a
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 62 deletions.
22 changes: 8 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,26 +24,14 @@ import org.jetbrains.grammarkit.tasks.*
```

### Configuration
Plugin provides two-level configuration: global, using `grammarKit` extension and per-task configuration. Task-specific configuration has higher precedence.

#### Global configuration options
Global configuration allows you to select necessary jFlex and Grammar-Kit versions.
```groovy
grammarKit {
// tag or short commit hash of IntelliJ patched JFlex (see links below), Default is 1.7.0
jflexRelease = '34fd65b92a'
// path to the custom skeleton file. If omitted, default IntelliJ skeleton file will be used
jflexSkeleton = '/some/custom/skeleton'
// tag or short commit hash of Grammar-Kit to use (see links below). Default is 2017.1 ready version
grammarKitRelease = '34fd65b92a'
// Target root for GrammarKit-generated files, 'gen' by default
grammarKitTargetRoot = 'gen'
// If this option is set, plugin will remove lexer, parser and psi directory before generation. Default: false
purgeOldFiles = true
}
```

Expand All @@ -62,6 +50,9 @@ task generatePerlLexer(type: GenerateLexer) {
// optional, path to the task-specific skeleton file. Default: none
skeleton = '/some/specific/skeleton'
// if set, plugin will remove a lexer output file before generating new one. Default: false
purgeOldFiles = true
}
```

Expand All @@ -74,11 +65,14 @@ task generatePerl5Parser(type: GenerateParser) {
// optional, task-specific root for the generated files. Default: none
targetRoot = 'gen'
// path to a parser file, relative to the local targetRoot or global grammarKitTargetRoot
// path to a parser file, relative to the targetRoot
pathToParser = '/com/perl5/lang/perl/parser/PerlParserGenerated.java'
// path to a directory with generated psi files, relative to the targetRoot
pathToPsiRoot = '/com/perl5/lang/perl/psi'
// if set, plugin will remove a parser output file and psi output directory before generating new ones. Default: false
purgeOldFiles = true
}
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,6 @@ package org.jetbrains.grammarkit

class GrammarKitPluginExtension {
def grammarKitRelease = '34fd65b92a'
def grammarKitTargetRoot = 'gen'

def jflexRelease = '1.7.0'
def jflexSkeleton

def purgeOldFiles = false
}

11 changes: 1 addition & 10 deletions src/main/groovy/org/jetbrains/grammarkit/tasks/BaseTask.groovy
Original file line number Diff line number Diff line change
@@ -1,24 +1,15 @@
package org.jetbrains.grammarkit.tasks

import org.gradle.api.tasks.JavaExec
import org.jetbrains.grammarkit.GrammarKitPluginExtension

/**
* Created by hurricup on 05.04.2017.
*/
abstract class BaseTask extends JavaExec {
def purgeOldFiles = false

protected GrammarKitPluginExtension getExtension() {
return project.extensions.findByType(GrammarKitPluginExtension)
}

protected boolean shouldPurge() {
return purgeOldFiles || getExtension().purgeOldFiles;
}

protected void purgeFiles(File... files) {
if (shouldPurge()) {
if (purgeOldFiles) {
doFirst {
project.delete(files)
}
Expand Down
29 changes: 12 additions & 17 deletions src/main/groovy/org/jetbrains/grammarkit/tasks/GenerateLexer.groovy
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package org.jetbrains.grammarkit.tasks

import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional

class GenerateLexer extends BaseTask {

@Input def targetDir
@Input def targetClass
@Input def source
@Input @Optional def skeleton
@Input
def targetDir
@Input
def targetClass
@Input
def source
@Input
def skeleton

GenerateLexer() {
project.afterEvaluate({
Expand All @@ -19,11 +22,11 @@ class GenerateLexer extends BaseTask {
outputs.file targetFile

def newArgs = []
def effectiveSkeleton = getEffectiveSkeleton()
if (effectiveSkeleton != null) {
if (skeleton != null) {
def skeletonFile = project.file(skeleton)
newArgs.add("--skel")
newArgs.add(effectiveSkeleton)
inputs.file effectiveSkeleton
newArgs.add(skeletonFile)
inputs.file skeletonFile
}
newArgs.add("-d")
newArgs.add(project.file(targetDir))
Expand All @@ -35,12 +38,4 @@ class GenerateLexer extends BaseTask {
purgeFiles(targetFile)
})
}

File getEffectiveSkeleton() {
if (skeleton != null) {
return project.file(skeleton);
}
def ext = getExtension()
return ext.jflexSkeleton == null ? null : project.file(ext.jflexSkeleton)
}
}
Original file line number Diff line number Diff line change
@@ -1,39 +1,34 @@
package org.jetbrains.grammarkit.tasks

import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional

class GenerateParser extends BaseTask {
@Input def source
@Input @Optional def targetRoot
@Input
def source
@Input
def targetRoot
// would be nice to obtain these from the GC
@Input def pathToParser
@Input def pathToPsiRoot
@Input
def pathToParser
@Input
def pathToPsiRoot

GenerateParser() {
setMain("org.intellij.grammar.Main");
project.afterEvaluate {
def bnfFile = project.file(source)
inputs.file bnfFile
def effectiveTargetRoot = getEffectiveTargetRoot()
def parserFile = project.file("$effectiveTargetRoot$pathToParser")
def parserFile = project.file("$targetRoot$pathToParser")
outputs.file parserFile
def psiDir = project.file("$effectiveTargetRoot$pathToPsiRoot")
def psiDir = project.file("$targetRoot$pathToPsiRoot")
outputs.dir psiDir

args = [project.file(effectiveTargetRoot), bnfFile]
args = [project.file(targetRoot), bnfFile]

classpath project.configurations.compile + project.configurations.compileOnly

purgeFiles(parserFile, psiDir)
}
}

String getEffectiveTargetRoot() {
if (targetRoot != null) {
return targetRoot;
}
return getExtension().grammarKitTargetRoot;
}
}

0 comments on commit d7ce81a

Please sign in to comment.