1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- # JSLint doesn't allow/support disabling the requirement for braces around
- # blocks, and that's one uglification I refuse to perform in the service of a
- # lint.
- #
- # There are of course lots of other intelligent things JSLint has to say
- # because it's just too easy in JS to do something that (e.g.) IE won't like.
- # So, this dumb script filters out any output messages from running JSLint
- # that look like they're complaints about '{' around braces.
- #
- # Also, takes an optional file describing the line mapping from the source
- # files to the combined distribution file, and outputs error messages in a
- # format suitable for vim (or whatever) pointing back to the source file.
- from subprocess import Popen, PIPE
- import sys
- import re
- def remapError(linestarts, line, col, err):
- if len(linestarts) == 0:
- # none supplied on command line
- return "%s:%d:%d: %s" % (sys.argv[1], line, col - 1, err)
- for i in range(len(linestarts)):
- if line > linestarts[i][0] and (i + 1 == len(linestarts) or (line <= linestarts[i + 1][0])):
- return "%s:%d:%d: %s" % (linestarts[i][1],
- line - linestarts[i][0],
- col - 1,
- err)
- raise Exception("Couldn't remap error!\n%s\n%s\n%s\n%s" % (linestarts, line, col, err))
- def main():
- p = Popen("support/d8/d8 support/jslint/fulljslint.js support/jslint/d8.js -- %s" % sys.argv[1],
- shell=True, stdout=PIPE)
- linestarts = []
- if len(sys.argv) > 2:
- linemaps = open(sys.argv[2]).read().split("\n")
- for l in linemaps:
- if len(l.strip()) == 0: continue
- start, fn = l.split(":")
- linestarts.append((int(start), fn))
- out, err = p.communicate()
- result = []
- report = []
- skip = 0
- mode = 'errors'
- for line in out.split("\n"):
- if line == "---REPORT":
- mode = 'report'
- continue
- if mode == "report":
- report.append(line)
- else:
- if skip > 0:
- skip -= 1
- else:
- if re.search(r"^.*Expected '{' and instead saw.*", line):
- skip = 2
- else:
- m = re.search("^Lint at line (\d+) character (\d+): (.*)$", line)
- if m:
- result.append(remapError(linestarts, int(m.group(1)),
- int(m.group(2)), m.group(3)))
- else:
- if line.strip() != "":
- result.append(line)
- if len(result) > 0:
- print '\n'.join(result)
- sys.exit(p.returncode)
- #open("dist/report.html", "w").write('\n'.join(report))
- sys.exit(0)
- if __name__ == "__main__": main()
|