mirror of
https://github.com/servo/servo.git
synced 2025-06-02 15:25:31 +00:00
Run test-tidy on Windows
This commit is contained in:
parent
5c92fd84ca
commit
b71774d8fe
5 changed files with 67 additions and 50 deletions
|
@ -17,7 +17,7 @@ AllowShortLoopsOnASingleLine: false
|
|||
AlwaysBreakAfterDefinitionReturnType: None
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AlwaysBreakTemplateDeclarations: false
|
||||
AlwaysBreakTemplateDeclarations: MultiLine
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
BraceWrapping:
|
||||
|
@ -39,6 +39,7 @@ BraceWrapping:
|
|||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeBraces: Attach
|
||||
BreakBeforeInheritanceComma: false
|
||||
BreakInheritanceList: BeforeColon
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializersBeforeComma: false
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
|
@ -79,6 +80,7 @@ MacroBlockBegin: ''
|
|||
MacroBlockEnd: ''
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: None
|
||||
ObjCBinPackProtocolList: Auto
|
||||
ObjCBlockIndentWidth: 2
|
||||
ObjCSpaceAfterProperty: false
|
||||
ObjCSpaceBeforeProtocolList: true
|
||||
|
@ -87,20 +89,21 @@ PenaltyBreakBeforeFirstCallParameter: 19
|
|||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyBreakTemplateDeclaration: 10
|
||||
PenaltyExcessCharacter: 1000000
|
||||
PenaltyReturnTypeOnItsOwnLine: 60
|
||||
PointerAlignment: Right
|
||||
RawStringFormats:
|
||||
- Delimiter: pb
|
||||
Language: TextProto
|
||||
BasedOnStyle: google
|
||||
ReflowComments: true
|
||||
SortIncludes: false
|
||||
SortUsingDeclarations: true
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceAfterTemplateKeyword: true
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCpp11BracedList: false
|
||||
SpaceBeforeCtorInitializerColon: true
|
||||
SpaceBeforeInheritanceColon: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceBeforeRangeBasedForLoopColon: true
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInAngles: false
|
||||
|
@ -109,6 +112,9 @@ SpacesInCStyleCastParentheses: false
|
|||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
Standard: Cpp11
|
||||
StatementMacros:
|
||||
- Q_UNUSED
|
||||
- QT_REQUIRE_VERSION
|
||||
TabWidth: 8
|
||||
UseTab: Never
|
||||
...
|
||||
|
|
|
@ -434,6 +434,7 @@ def windows_uwp_x64():
|
|||
.with_script(
|
||||
"python mach build --dev --target=x86_64-uwp-windows-msvc",
|
||||
"python mach package --dev --target=x86_64-uwp-windows-msvc --uwp=x64",
|
||||
"python mach test-tidy --force-cpp --no-wpt",
|
||||
)
|
||||
.with_artifacts(appx_artifact(debug=True))
|
||||
.find_or_create("build.windows_uwp_x64_dev." + CONFIG.task_id())
|
||||
|
|
|
@ -28,7 +28,7 @@ class Lint(LintRunner):
|
|||
yield f[len(working_dir):]
|
||||
|
||||
def run(self):
|
||||
if self.stylo:
|
||||
if self.stylo or self.no_wpt:
|
||||
return
|
||||
|
||||
wpt_working_dir = os.path.abspath(os.path.join(WPT_PATH, "web-platform-tests"))
|
||||
|
|
|
@ -34,7 +34,7 @@ from mach.decorators import (
|
|||
|
||||
from servo.command_base import (
|
||||
BuildNotFound, CommandBase,
|
||||
call, check_call, set_osmesa_env,
|
||||
call, check_call, check_output, set_osmesa_env,
|
||||
)
|
||||
from servo.util import host_triple
|
||||
|
||||
|
@ -49,6 +49,7 @@ WEB_PLATFORM_TESTS_PATH = os.path.join("tests", "wpt", "web-platform-tests")
|
|||
SERVO_TESTS_PATH = os.path.join("tests", "wpt", "mozilla", "tests")
|
||||
|
||||
CLANGFMT_CPP_DIRS = ["support/hololens/"]
|
||||
CLANGFMT_VERSION = "8"
|
||||
|
||||
TEST_SUITES = OrderedDict([
|
||||
("tidy", {"kwargs": {"all_files": False, "no_progress": False, "self_test": False,
|
||||
|
@ -326,8 +327,8 @@ class MachCommands(CommandBase):
|
|||
help="Run unit tests for tidy")
|
||||
@CommandArgument('--stylo', default=False, action="store_true",
|
||||
help="Only handle files in the stylo tree")
|
||||
@CommandArgument('--no-cpp', default=False, action="store_true", help="Skip CPP files")
|
||||
def test_tidy(self, all_files, no_wpt, no_progress, self_test, stylo, no_cpp):
|
||||
@CommandArgument('--force-cpp', default=False, action="store_true", help="Force CPP check")
|
||||
def test_tidy(self, all_files, no_wpt, no_progress, self_test, stylo, force_cpp):
|
||||
if self_test:
|
||||
return test_tidy.do_tests()
|
||||
else:
|
||||
|
@ -335,19 +336,22 @@ class MachCommands(CommandBase):
|
|||
manifest_dirty = False
|
||||
else:
|
||||
manifest_dirty = run_update(self.context.topdir, check_clean=True)
|
||||
tidy_failed = tidy.scan(not all_files, not no_progress, stylo=stylo)
|
||||
tidy_failed = tidy.scan(not all_files, not no_progress, stylo=stylo, no_wpt=no_wpt)
|
||||
self.install_rustfmt()
|
||||
rustfmt_failed = self.call_rustup_run(["cargo", "fmt", "--", "--check"])
|
||||
|
||||
env = self.build_env()
|
||||
clangfmt_failed = False
|
||||
if not no_cpp:
|
||||
available, cmd, files = setup_clangfmt()
|
||||
if available:
|
||||
for file in files:
|
||||
stdout = subprocess.check_output([cmd, "-output-replacements-xml", file])
|
||||
if len(XML(stdout)) > 0:
|
||||
print("%s is not formatted correctly." % file)
|
||||
clangfmt_failed = True
|
||||
available, cmd, files = setup_clangfmt(env)
|
||||
if available:
|
||||
for file in files:
|
||||
stdout = check_output([cmd, "-output-replacements-xml", file], env=env)
|
||||
if len(XML(stdout)) > 0:
|
||||
print("%s is not formatted correctly." % file)
|
||||
clangfmt_failed = True
|
||||
elif force_cpp:
|
||||
print("Error: can't find suitable clang-format version. Required with --force-cpp.")
|
||||
return True
|
||||
|
||||
if rustfmt_failed or clangfmt_failed:
|
||||
print("Run `./mach fmt` to fix the formatting")
|
||||
|
@ -476,13 +480,12 @@ class MachCommands(CommandBase):
|
|||
@Command('fmt',
|
||||
description='Format the Rust and CPP source files with rustfmt and clang-format',
|
||||
category='testing')
|
||||
@CommandArgument('--no-cpp', default=False, action="store_true", help="Skip CPP files")
|
||||
def format_code(self, no_cpp):
|
||||
def format_code(self):
|
||||
|
||||
if not no_cpp:
|
||||
available, cmd, files = setup_clangfmt()
|
||||
if available and len(files) > 0:
|
||||
check_call([cmd, "-i"] + files)
|
||||
env = self.build_env()
|
||||
available, cmd, files = setup_clangfmt(env)
|
||||
if available and len(files) > 0:
|
||||
check_call([cmd, "-i"] + files, env=env)
|
||||
|
||||
self.install_rustfmt()
|
||||
return self.call_rustup_run(["cargo", "fmt"])
|
||||
|
@ -771,6 +774,23 @@ class MachCommands(CommandBase):
|
|||
pass
|
||||
|
||||
|
||||
def setup_clangfmt(env):
|
||||
cmd = "clang-format.exe" if sys.platform == "win32" else "clang-format"
|
||||
try:
|
||||
version = check_output([cmd, "--version"], env=env).rstrip()
|
||||
print(version)
|
||||
if not version.startswith("clang-format version {}.".format(CLANGFMT_VERSION)):
|
||||
print("clang-format: wrong version (v{} required). Skipping CPP formatting.".format(CLANGFMT_VERSION))
|
||||
return False, None, None
|
||||
except OSError:
|
||||
print("clang-format not installed. Skipping CPP formatting.")
|
||||
return False, None, None
|
||||
gitcmd = ['git', 'ls-files']
|
||||
gitfiles = check_output(gitcmd + CLANGFMT_CPP_DIRS).splitlines()
|
||||
filtered = [line for line in gitfiles if line.endswith(".h") or line.endswith(".cpp")]
|
||||
return True, cmd, filtered
|
||||
|
||||
|
||||
def create_parser_create():
|
||||
import argparse
|
||||
p = argparse.ArgumentParser()
|
||||
|
@ -797,23 +817,6 @@ def create_parser_create():
|
|||
return p
|
||||
|
||||
|
||||
def setup_clangfmt():
|
||||
cmd = "clang-format.exe" if sys.platform == "win32" else "clang-format"
|
||||
try:
|
||||
version = subprocess.check_output([cmd, "--version"]).rstrip()
|
||||
print(version)
|
||||
if not version.startswith("clang-format version 6."):
|
||||
print("clang-format: wrong version (v6 required). Skipping CPP formatting.")
|
||||
return False, None, None
|
||||
except OSError:
|
||||
print("clang-format not installed. Skipping CPP formatting.")
|
||||
return False, None, None
|
||||
gitcmd = ['git', 'ls-files']
|
||||
gitfiles = subprocess.check_output(gitcmd + CLANGFMT_CPP_DIRS).splitlines()
|
||||
filtered = [line for line in gitfiles if line.endswith(".h") or line.endswith(".cpp")]
|
||||
return True, cmd, filtered
|
||||
|
||||
|
||||
@CommandProvider
|
||||
class WebPlatformTestsCreator(CommandBase):
|
||||
template_prefix = """<!doctype html>
|
||||
|
|
|
@ -890,7 +890,7 @@ def check_spec(file_name, lines):
|
|||
break
|
||||
|
||||
|
||||
def check_config_file(config_file, print_text=True):
|
||||
def check_config_file(config_file, print_text=True, no_wpt=False):
|
||||
# Check if config file exists
|
||||
if not os.path.exists(config_file):
|
||||
print("%s config file is required but was not found" % config_file)
|
||||
|
@ -915,6 +915,11 @@ def check_config_file(config_file, print_text=True):
|
|||
# Check for invalid listed ignored files
|
||||
invalid_files = [f for f in exclude.get("files", []) if not os.path.exists(f)]
|
||||
|
||||
# Do not check for the existense of ignored files under tests/wpts if --no-wpt is used
|
||||
if no_wpt:
|
||||
wpt_dir = './tests/wpt/'
|
||||
invalid_files = [f for f in invalid_files if not os.path.commonprefix([wpt_dir, f]) == wpt_dir]
|
||||
|
||||
current_table = ""
|
||||
for idx, line in enumerate(lines):
|
||||
# Ignore comment lines
|
||||
|
@ -1052,12 +1057,14 @@ def check_dep_license_errors(filenames, progress=True):
|
|||
|
||||
|
||||
class LintRunner(object):
|
||||
def __init__(self, lint_path=None, only_changed_files=True, exclude_dirs=[], progress=True, stylo=False):
|
||||
def __init__(self, lint_path=None, only_changed_files=True,
|
||||
exclude_dirs=[], progress=True, stylo=False, no_wpt=False):
|
||||
self.only_changed_files = only_changed_files
|
||||
self.exclude_dirs = exclude_dirs
|
||||
self.progress = progress
|
||||
self.path = lint_path
|
||||
self.stylo = stylo
|
||||
self.no_wpt = no_wpt
|
||||
|
||||
def check(self):
|
||||
if not os.path.exists(self.path):
|
||||
|
@ -1079,7 +1086,7 @@ class LintRunner(object):
|
|||
return
|
||||
|
||||
lint = module.Lint(self.path, self.only_changed_files,
|
||||
self.exclude_dirs, self.progress, stylo=self.stylo)
|
||||
self.exclude_dirs, self.progress, stylo=self.stylo, no_wpt=self.no_wpt)
|
||||
for error in lint.run():
|
||||
if type(error) is not tuple or (type(error) is tuple and len(error) != 3):
|
||||
yield (self.path, 1, "errors should be a tuple of (path, line, reason)")
|
||||
|
@ -1095,19 +1102,19 @@ class LintRunner(object):
|
|||
yield (self.path, 0, "class 'Lint' should implement 'run' method")
|
||||
|
||||
|
||||
def run_lint_scripts(only_changed_files=False, progress=True, stylo=False):
|
||||
runner = LintRunner(only_changed_files=only_changed_files, progress=progress, stylo=stylo)
|
||||
def run_lint_scripts(only_changed_files=False, progress=True, stylo=False, no_wpt=False):
|
||||
runner = LintRunner(only_changed_files=only_changed_files, progress=progress, stylo=stylo, no_wpt=no_wpt)
|
||||
for path in config['lint-scripts']:
|
||||
runner.path = path
|
||||
for error in runner.check():
|
||||
yield error
|
||||
|
||||
|
||||
def scan(only_changed_files=False, progress=True, stylo=False):
|
||||
def scan(only_changed_files=False, progress=True, stylo=False, no_wpt=False):
|
||||
# check config file for errors
|
||||
config_errors = check_config_file(CONFIG_FILE_PATH)
|
||||
config_errors = check_config_file(CONFIG_FILE_PATH, no_wpt=no_wpt)
|
||||
# check ini directories exist
|
||||
if os.path.isfile(WPT_MANIFEST_PATH):
|
||||
if not no_wpt and os.path.isfile(WPT_MANIFEST_PATH):
|
||||
manifest_errors = check_manifest_dirs(WPT_MANIFEST_PATH)
|
||||
else:
|
||||
manifest_errors = ()
|
||||
|
@ -1122,7 +1129,7 @@ def scan(only_changed_files=False, progress=True, stylo=False):
|
|||
# check dependecy licenses
|
||||
dep_license_errors = check_dep_license_errors(get_dep_toml_files(only_changed_files), progress)
|
||||
# other lint checks
|
||||
lint_errors = run_lint_scripts(only_changed_files, progress, stylo=stylo)
|
||||
lint_errors = run_lint_scripts(only_changed_files, progress, stylo=stylo, no_wpt=no_wpt)
|
||||
# chain all the iterators
|
||||
errors = itertools.chain(config_errors, manifest_errors, directory_errors, lint_errors,
|
||||
file_errors, dep_license_errors)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue