Skip to content

Commit

Permalink
Using built-in Rhino and JsHint from Gradle 1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
eriwen committed Aug 4, 2012
1 parent 8b8700a commit 38fa1e8
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 31 deletions.
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@ apply plugin: 'idea'

defaultTasks 'clean', 'build'

version = '1.1'
version = '1.2'
group = 'com.eriwen'
ext.archivesBaseName = 'gradle-js-plugin'
ext.isSnapshot = version.endsWith("-SNAPSHOT")

repositories {
mavenCentral()
mavenRepo url: 'http://oss.sonatype.org/content/repositories/snapshots/'
}

dependencies {
Expand Down
5 changes: 5 additions & 0 deletions plugin.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,11 @@ task gzip(type: com.eriwen.gradle.js.tasks.GzipJsTask) {
dest = "${buildDir}/all-${version}.min.js"
}

jshint {
source = javascript.source.custom.js.files
dest = "${buildDir}/jshint.out"
}

task jshintz(type: com.eriwen.gradle.js.tasks.JsHintTask) {
source = javascript.source.custom.js.files
dest = "${buildDir}/jshint.out"
Expand Down
51 changes: 48 additions & 3 deletions src/main/groovy/com/eriwen/gradle/js/JavaScriptExtension.groovy
Original file line number Diff line number Diff line change
@@ -1,22 +1,67 @@
/*
* Copyright 2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.eriwen.gradle.js

import com.eriwen.gradle.js.source.JavaScriptSourceSetContainer
import com.eriwen.gradle.js.source.internal.DefaultJavaScriptSourceSetContainer
import com.eriwen.gradle.js.source.internal.InternalGradle
import org.gradle.api.artifacts.repositories.ArtifactRepository;
import org.gradle.api.artifacts.repositories.IvyArtifactRepository;
import org.gradle.api.artifacts.repositories.MavenArtifactRepository;
import org.gradle.api.Project
import org.gradle.util.ConfigureUtil
import org.gradle.api.internal.artifacts.ResolverFactory;
import org.gradle.api.internal.artifacts.repositories.layout.PatternRepositoryLayout;

class JavaScriptExtension {

public static final NAME = "javascript"


public static final String GRADLE_PUBLIC_JAVASCRIPT_REPO_URL = "http://repo.gradle.org/gradle/javascript-public";
public static final String GOOGLE_APIS_REPO_URL = "http://ajax.googleapis.com/ajax/libs";

final JavaScriptSourceSetContainer source
private final ResolverFactory resolverFactory;

JavaScriptExtension(Project project) {
public JavaScriptExtension(Project project /*, ResolverFactory resolverFactoryIn */) {
source = InternalGradle.toInstantiator(project).newInstance(DefaultJavaScriptSourceSetContainer, project)
// this.resolverFactory = resolverFactoryIn;
}

void source(Closure closure) {
ConfigureUtil.configure(closure, source)
}

public ArtifactRepository getGradlePublicJavaScriptRepository() {
MavenArtifactRepository repo = resolverFactory.createMavenRepository();
repo.setUrl(GRADLE_PUBLIC_JAVASCRIPT_REPO_URL);
repo.setName("Gradle Public JavaScript Repository");
return repo;
}

public ArtifactRepository getGoogleApisRepository() {
IvyArtifactRepository repo = resolverFactory.createIvyRepository();
repo.setName("Google Libraries Repository");
repo.setUrl(GOOGLE_APIS_REPO_URL);
repo.layout("pattern", new Closure(this) {
public void doCall() {
PatternRepositoryLayout layout = (PatternRepositoryLayout) getDelegate();
layout.artifact("[organization]/[revision]/[module].[ext]");
layout.ivy("[organization]/[revision]/[module].xml");
}
});
return repo;
}
}
25 changes: 18 additions & 7 deletions src/main/groovy/com/eriwen/gradle/js/JsPlugin.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,16 @@ package com.eriwen.gradle.js
import org.gradle.api.Plugin
import org.gradle.api.Project
import com.eriwen.gradle.js.tasks.*
import org.gradle.plugins.javascript.rhino.RhinoPlugin
import org.gradle.api.plugins.ReportingBasePlugin
import org.gradle.api.reporting.ReportingExtension

class JsPlugin implements Plugin<Project> {

void apply(final Project project) {
project.plugins.apply(RhinoPlugin)
project.plugins.apply(ReportingBasePlugin)

project.extensions.create(ClosureCompilerExtension.NAME, ClosureCompilerExtension)
project.extensions.create(JsDocExtension.NAME, JsDocExtension)
project.extensions.create(Props2JsExtension.NAME, Props2JsExtension)
Expand All @@ -32,12 +38,13 @@ class JsPlugin implements Plugin<Project> {
}

void applyTasks(final Project project) {
project.task('minifyJs', type: MinifyJsTask) {}
project.task('combineJs', type: CombineJsTask) {}
project.task('gzipJs', type: GzipJsTask) {}
project.task('jshint', type: JsHintTask) {}
project.task('jsdoc', type: JsDocTask) {}
project.task('props2js', type: Props2JsTask) {}
//project.task('coffee', type: TranspileCoffeeScriptTask, group: 'Build', description: 'Transpile CoffeeScript to JavaScript') {}
project.task('combineJs', type: CombineJsTask, group: 'Build', description: 'Combine many JavaScript files into one') {}
project.task('minifyJs', type: MinifyJsTask, group: 'Build', description: 'Minify JavaScript using Closure Compiler') {}
project.task('gzipJs', type: GzipJsTask, group: 'Build', description: 'GZip a given JavaScript file') {}
project.task('jshint', type: JsHintTask, group: 'Verification', description: 'Analyze JavaScript sources with JSHint') {}
project.task('jsdoc', type: JsDocTask, group: 'Documentation', description: 'Produce HTML documentation with JSDoc 3') {}
project.task('props2js', type: Props2JsTask, group: 'Build', description: 'Convert Java properties files for use with JavaScript') {}
}

void configureDependencies(final Project project) {
Expand All @@ -48,7 +55,11 @@ class JsPlugin implements Plugin<Project> {
mavenCentral()
}
project.dependencies {
rhino 'org.mozilla:rhino:1.7R3'
rhino 'org.mozilla:rhino:1.7R4'
// rhino 'com.google.code.gson:gson:2.2.1'
//add javaScript.gradlePublicJavaScriptRepository
//add javaScript.googleApisRepository
}
// TODO: have 'check' depend on jshint
}
}
8 changes: 5 additions & 3 deletions src/main/groovy/com/eriwen/gradle/js/tasks/JsDocTask.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,16 @@
package com.eriwen.gradle.js.tasks

import com.eriwen.gradle.js.ResourceUtil
import com.eriwen.gradle.js.RhinoExec
import org.gradle.api.tasks.SourceTask
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.gradle.plugins.javascript.rhino.RhinoShellExec

class JsDocTask extends SourceTask {
private static final String JSDOC_PATH = 'jsdoc.zip'
private static final String TMP_DIR = "tmp${File.separator}js"
private static final ResourceUtil RESOURCE_UTIL = new ResourceUtil()
private final RhinoExec rhino = new RhinoExec(project)
private final RhinoShellExec rhino = new RhinoShellExec()

Iterable<String> modulePaths = ['node_modules', 'rhino_modules', '.']
Boolean debug = false
Expand Down Expand Up @@ -54,6 +54,8 @@ class JsDocTask extends SourceTask {
args.addAll(['-d', (destinationDir as File).absolutePath])
args.addAll(project.jsdoc.options.collect { it })

rhino.execute(args, [workingDir: workingDir])
rhino.scriptArgs = ["workingDir=${workingDir}"]
rhino.args(args)
rhino.execute()
}
}
18 changes: 4 additions & 14 deletions src/main/groovy/com/eriwen/gradle/js/tasks/JsHintTask.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,10 @@
package com.eriwen.gradle.js.tasks

import org.gradle.api.tasks.TaskAction
import com.eriwen.gradle.js.ResourceUtil
import com.eriwen.gradle.js.RhinoExec
import org.gradle.api.tasks.SourceTask
import org.gradle.api.tasks.OutputFile
import org.gradle.plugins.javascript.jshint.JsHint

class JsHintTask extends SourceTask {
private static final String JSHINT_PATH = 'jshint-rhino.js'
private static final String TMP_DIR = "tmp${File.separator}js"
private static final ResourceUtil RESOURCE_UTIL = new ResourceUtil()
private final RhinoExec rhino = new RhinoExec(project)

class JsHintTask extends JsHint {
@OutputFile def dest

File getDest() {
Expand All @@ -35,10 +28,7 @@ class JsHintTask extends SourceTask {

@TaskAction
def run() {
final File jshintJsFile = RESOURCE_UTIL.extractFileToDirectory(
new File(project.buildDir, TMP_DIR), JSHINT_PATH)
final List<String> args = [jshintJsFile.canonicalPath]
args.addAll(source.files.collect { it.canonicalPath })
rhino.execute(args, [ignoreExitCode: true, out: new FileOutputStream(dest as File)])
this.jsonReport = dest
this.doJsHint()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,9 @@ class JsPluginFunctionalTest extends FunctionalSpec {
}
"""
and:
file("src/custom/js/file1.js") << "function fn1() { console.log('1'); }"
file("src/custom/js/bar.js") << "function fn1() { console.log('1'); }"
and:
file("src/custom/js/file2.js") << "function fn2() { console.log('2'); }"
file("src/custom/js/foo.js") << "function fn2() { console.log('2'); }"

when:
run "minifyJs"
Expand All @@ -110,7 +110,7 @@ class JsPluginFunctionalTest extends FunctionalSpec {
wasUpToDate ":minifyJs"

when:
file("src/custom/js/file3.js") << "function fn3() { console.log('3'); }"
file("src/custom/js/xee.js") << "function fn3() { console.log('3'); }"

and:
run "minifyJs"
Expand Down

0 comments on commit 38fa1e8

Please sign in to comment.