Skip to content

Commit

Permalink
Add incremental syntax checking and linting
Browse files Browse the repository at this point in the history
This fixes bazelbuild#41.
  • Loading branch information
jart committed May 4, 2016
1 parent 6c1abfc commit 56fb9cd
Show file tree
Hide file tree
Showing 14 changed files with 547 additions and 220 deletions.
26 changes: 18 additions & 8 deletions closure/compiler/closure_js_library.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,13 @@ load("//closure/private:defs.bzl",
"collect_js_srcs",
"determine_js_language")

def _determine_check_language(language):
if language == "ANY":
return "ECMASCRIPT3"
return language

def _impl(ctx):
srcs, externs = collect_js_srcs(ctx)
direct_srcs, direct_externs = collect_js_srcs(ctx, transitive=False)
if ctx.files.exports:
for forbid in ['srcs', 'externs', 'deps']:
if getattr(ctx.files, forbid):
Expand All @@ -37,27 +41,32 @@ def _impl(ctx):
if ctx.files.srcs and ctx.files.externs:
fail("'srcs' may not be specified when 'externs' is set")
inputs = []
args = ["--output_file=%s" % ctx.outputs.provided.path,
"--label=%s" % ctx.label]
args = ["--output=%s" % ctx.outputs.provided.path,
"--label=%s" % ctx.label,
"--language=%s" % _determine_check_language(ctx.attr.language)]
if ctx.attr.testonly:
args += ["--testonly"]
for direct_src in direct_srcs:
for direct_src in ctx.files.srcs:
args += ["--src=%s" % direct_src.path]
inputs.append(direct_src)
for direct_extern in direct_externs:
for direct_extern in ctx.files.externs:
args += ["--extern=%s" % direct_extern.path]
inputs.append(direct_extern)
for direct_dep in ctx.attr.deps:
args += ["--dep=%s" % direct_dep.js_provided.path]
inputs.append(direct_dep.js_provided)
for edep in direct_dep.js_exports:
args += ["--dep=%s" % edep.js_provided.path]
inputs.append(edep.js_provided)
args += ["--jscomp_off=%s" % s for s in ctx.attr.suppress]
ctx.action(
inputs=inputs,
outputs=[ctx.outputs.provided],
executable=ctx.executable._jschecker,
arguments=args,
mnemonic="JSChecker",
progress_message="Sanity checking %d JS files in %s" % (
len(srcs) + len(externs), ctx.label))
progress_message="Checking %d JS files in %s" % (
len(ctx.files.srcs) + len(ctx.files.externs), ctx.label))
return struct(files=set(ctx.files.srcs),
js_language=determine_js_language(ctx),
js_exports=ctx.attr.exports,
Expand All @@ -74,8 +83,9 @@ closure_js_library = rule(
"deps": JS_DEPS_ATTR,
"exports": JS_DEPS_ATTR,
"language": attr.string(default=JS_LANGUAGE_DEFAULT),
"suppress": attr.string_list(),
"_jschecker": attr.label(
default=Label("//closure/compiler/jschecker"),
default=Label("//java/com/google/javascript/jscomp:jschecker"),
executable=True),
},
outputs={"provided": "%{name}-provided.txt"})
24 changes: 0 additions & 24 deletions closure/compiler/jschecker/BUILD

This file was deleted.

163 changes: 0 additions & 163 deletions closure/compiler/jschecker/jschecker.py

This file was deleted.

12 changes: 12 additions & 0 deletions closure/library/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@ closure_js_library(
name = "library",
srcs = ["@closure_library//:js_files"],
language = "ECMASCRIPT5_STRICT",
suppress = [
"duplicateEnumValue",
"illegalPrototypeMember",
"invalidSuppress",
"missingJsDoc",
"missingReturnJsDoc",
],
deps = [":base"],
)

Expand All @@ -29,6 +36,10 @@ closure_js_library(
testonly = True,
srcs = ["@closure_library//:js_testing_files"],
language = "ECMASCRIPT5_STRICT",
suppress = [
"invalidSuppress",
"missingJsDoc",
],
deps = [":library"],
)

Expand All @@ -47,4 +58,5 @@ closure_js_library(
name = "base",
srcs = ["@closure_library//:closure/goog/base.js"],
language = "ECMASCRIPT5_STRICT",
suppress = ["invalidSuppress"],
)
9 changes: 0 additions & 9 deletions closure/library/closure_library.BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -837,23 +837,14 @@ filegroup(
"closure/goog/labs/testing/assertthat.js",
"closure/goog/labs/testing/assertthat_test.js",
"closure/goog/labs/testing/decoratormatcher.js",
"closure/goog/labs/testing/decoratormatcher_test.js",
"closure/goog/labs/testing/dictionarymatcher.js",
"closure/goog/labs/testing/dictionarymatcher_test.js",
"closure/goog/labs/testing/environment.js",
"closure/goog/labs/testing/environment_test.js",
"closure/goog/labs/testing/environment_usage_test.js",
"closure/goog/labs/testing/json_fuzzing.js",
"closure/goog/labs/testing/json_fuzzing_test.js",
"closure/goog/labs/testing/logicmatcher.js",
"closure/goog/labs/testing/logicmatcher_test.js",
"closure/goog/labs/testing/matcher.js",
"closure/goog/labs/testing/numbermatcher.js",
"closure/goog/labs/testing/numbermatcher_test.js",
"closure/goog/labs/testing/objectmatcher.js",
"closure/goog/labs/testing/objectmatcher_test.js",
"closure/goog/labs/testing/stringmatcher.js",
"closure/goog/labs/testing/stringmatcher_test.js",
"closure/goog/labs/useragent/test_agents.js",
"closure/goog/promise/testsuiteadapter.js",
"closure/goog/soy/soy_testhelper.js",
Expand Down
7 changes: 3 additions & 4 deletions closure/private/defs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,12 @@ JS_DEPS_ATTR = attr.label_list(
"transitive_js_srcs",
"transitive_js_externs"])

def collect_js_srcs(ctx, transitive=True):
def collect_js_srcs(ctx):
srcs = set(order="compile")
externs = set(order="compile")
for dep in ctx.attr.deps:
if transitive:
srcs += dep.transitive_js_srcs
externs += dep.transitive_js_externs
srcs += dep.transitive_js_srcs
externs += dep.transitive_js_externs
for edep in dep.js_exports:
srcs += edep.transitive_js_srcs
externs += edep.transitive_js_externs
Expand Down
36 changes: 24 additions & 12 deletions closure/repositories.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -227,33 +227,45 @@ def soyutils_usegoog():
url = "https://bazel-mirror.storage.googleapis.com/repo1.maven.org/maven2/com/google/template/soy/2016-01-12/soy-2016-01-12-soyutils_usegoog.js",
)

def closure_repositories():
aopalliance()
def closure_repositories_asm():
asm()
asm_analysis()
asm_commons()
asm_util()
args4j()

def closure_repositories_closure():
closure_compiler()
closure_library()
closure_linter()
closure_stylesheets()
fonts_noto_hinted_deb()
fonts_noto_mono_deb()
guava()
gson()
soy()
soyutils_usegoog()

def closure_repositories_guice():
aopalliance()
guice()
guice_assistedinject()
guice_multibindings()
icu4j()
jsr305()
jsr330_inject()

def closure_repositories_phantomjs():
fonts_noto_hinted_deb()
fonts_noto_mono_deb()
libexpat_amd64_deb()
libfontconfig_amd64_deb()
libfreetype_amd64_deb()
libpng_amd64_deb()
phantomjs_linux_x86_64()
phantomjs_macosx()

def closure_repositories():
args4j()
closure_repositories_asm()
closure_repositories_closure()
closure_repositories_guice()
closure_repositories_phantomjs()
guava()
gson()
icu4j()
jsr305()
jsr330_inject()
python_gflags()
soy()
soyutils_usegoog()
4 changes: 4 additions & 0 deletions closure/templates/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ java_library(
closure_js_library(
name = "soyutils_usegoog",
srcs = ["@soyutils_usegoog//file"],
suppress = [
"mustBePrivate",
"optionalParams",
],
deps = ["//closure/library"],
)

Expand Down
Loading

0 comments on commit 56fb9cd

Please sign in to comment.