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 9ec1502
Show file tree
Hide file tree
Showing 13 changed files with 548 additions and 231 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(),

This comment has been minimized.

Copy link
@hochhaus

hochhaus May 4, 2016

Does it make sense to add suppress support to closure_js_binary() for symmetry in the API?

"_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"],
)
57 changes: 25 additions & 32 deletions closure/library/closure_library.BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -835,25 +835,15 @@ filegroup(
# This list was generated by :js_testing_files_maker
"closure/goog/html/testing.js",
"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 Expand Up @@ -904,7 +894,6 @@ filegroup(
"closure/goog/testing/net/xhrio.js",
"closure/goog/testing/net/xhriopool.js",
"closure/goog/testing/objectpropertystring.js",
"closure/goog/testing/parallel_closure_test_suite.js",
"closure/goog/testing/performancetable.js",
"closure/goog/testing/performancetimer.js",
"closure/goog/testing/propertyreplacer.js",
Expand Down Expand Up @@ -980,27 +969,6 @@ py_binary(

# FILESET_MAKER_COMMAND = "#/bin/bash\n{ for s in $(SRCS); do echo \\\"$${s#external/closure_library/}\\\",; done; } | sort >$@"

# genrule(
# name = "js_testing_files_maker",
# srcs = glob(
# [
# "closure/goog/labs/testing/**/*.js",
# "closure/goog/testing/**/*.js",
# ],
# exclude = ["closure/goog/testing/**/*_test.js"],
# ) + [
# "closure/goog/html/testing.js",
# "closure/goog/labs/useragent/test_agents.js",
# "closure/goog/promise/testsuiteadapter.js",
# "closure/goog/soy/soy_testhelper.js",
# "closure/goog/tweak/testhelpers.js",
# "closure/goog/useragent/useragenttestutil.js",
# ],
# outs = ["js_testing_files_maker.txt"],
# cmd = FILESET_MAKER_COMMAND,
# visibility = ["//visibility:private"],
# )

# genrule(
# name = "js_files_maker",
# srcs = glob(
Expand Down Expand Up @@ -1042,3 +1010,28 @@ py_binary(
# cmd = FILESET_MAKER_COMMAND,
# visibility = ["//visibility:private"],
# )

# genrule(
# name = "js_testing_files_maker",
# srcs = glob(
# [
# "closure/goog/labs/testing/**/*.js",
# "closure/goog/testing/**/*.js",
# ],
# exclude = [
# "closure/goog/testing/**/*_test.js",
# "closure/goog/testing/**/*_test_suite.js",
# "closure/goog/labs/testing/**/*_test.js",
# ],
# ) + [
# "closure/goog/html/testing.js",
# "closure/goog/labs/useragent/test_agents.js",
# "closure/goog/promise/testsuiteadapter.js",
# "closure/goog/soy/soy_testhelper.js",
# "closure/goog/tweak/testhelpers.js",
# "closure/goog/useragent/useragenttestutil.js",
# ],
# outs = ["js_testing_files_maker.txt"],
# cmd = FILESET_MAKER_COMMAND,
# visibility = ["//visibility:private"],
# )
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
Loading

0 comments on commit 9ec1502

Please sign in to comment.