mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1230300: Add a hg extension that rejects changesets that fail to pass eslint. r=gps
This grabs the list of changed and added files that match the set we expect to be able to lint and runs them through eslint displaying simple messages on error.
This commit is contained in:
parent
4aba1962d9
commit
b9c08ee9b3
45
tools/mercurial/eslintvalidate.py
Normal file
45
tools/mercurial/eslintvalidate.py
Normal file
@ -0,0 +1,45 @@
|
||||
# This software may be used and distributed according to the terms of the
|
||||
# GNU General Public License version 2 or any later version.
|
||||
|
||||
import os
|
||||
import sys
|
||||
import re
|
||||
import json
|
||||
from subprocess import check_output, CalledProcessError
|
||||
|
||||
lintable = re.compile(r'.+\.(?:js|jsm|jsx|xml)$')
|
||||
ignored = "File ignored because of your .eslintignore file. Use --no-ignore to override."
|
||||
|
||||
def is_lintable(filename):
|
||||
return lintable.match(filename)
|
||||
|
||||
def display(ui, output):
|
||||
results = json.loads(output)
|
||||
for file in results:
|
||||
path = os.path.relpath(file["filePath"])
|
||||
for message in file["messages"]:
|
||||
if message["message"] == ignored:
|
||||
continue
|
||||
|
||||
ui.warn("%s:%d:%d %s\n" % (path, message["line"], message["column"], message["message"]))
|
||||
|
||||
def eslinthook(ui, repo, node=None, **opts):
|
||||
ctx = repo[node]
|
||||
if len(ctx.parents()) > 1:
|
||||
return 0
|
||||
|
||||
deleted = repo.status(ctx.p1().node(), ctx.node()).deleted
|
||||
files = [f for f in ctx.files() if f not in deleted and is_lintable(f)]
|
||||
|
||||
if len(files) == 0:
|
||||
return
|
||||
|
||||
try:
|
||||
output = check_output(["eslint", "--format", "json"] + files)
|
||||
display(ui, output)
|
||||
except CalledProcessError as ex:
|
||||
display(ui, ex.output)
|
||||
ui.warn("ESLint found problems in your changes, please correct them.\n")
|
||||
|
||||
def reposetup(ui, repo):
|
||||
ui.setconfig('hooks', 'commit.eslint', eslinthook)
|
Loading…
Reference in New Issue
Block a user