Skip to content

Commit

Permalink
Format CPP code with clang-format
Browse files Browse the repository at this point in the history
  • Loading branch information
paulrouget committed Oct 30, 2019
1 parent de9c84f commit 70823e3
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 5 deletions.
File renamed without changes.
52 changes: 47 additions & 5 deletions python/servo/testing_commands.py
Expand Up @@ -22,6 +22,7 @@
import base64
import shutil
import subprocess
from xml.etree.ElementTree import XML
from six import iteritems

from mach.registrar import Registrar
Expand All @@ -47,6 +48,8 @@
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/"]

TEST_SUITES = OrderedDict([
("tidy", {"kwargs": {"all_files": False, "no_progress": False, "self_test": False,
"stylo": False},
Expand Down Expand Up @@ -323,7 +326,8 @@ def install_rustfmt(self):
help="Run unit tests for tidy")
@CommandArgument('--stylo', default=False, action="store_true",
help="Only handle files in the stylo tree")
def test_tidy(self, all_files, no_wpt, no_progress, self_test, stylo):
@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):
if self_test:
return test_tidy.do_tests()
else:
Expand All @@ -334,9 +338,21 @@ def test_tidy(self, all_files, no_wpt, no_progress, self_test, stylo):
tidy_failed = tidy.scan(not all_files, not no_progress, stylo=stylo)
self.install_rustfmt()
rustfmt_failed = self.call_rustup_run(["cargo", "fmt", "--", "--check"])
if rustfmt_failed:

clangfmt_failed = False
if not no_cpp:
available, cmd, files = setup_clangfmt(all_files)
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

if rustfmt_failed or clangfmt_failed:
print("Run `./mach fmt` to fix the formatting")
return tidy_failed or manifest_dirty or rustfmt_failed

return tidy_failed or manifest_dirty or rustfmt_failed or clangfmt_failed

@Command('test-webidl',
description='Run the WebIDL parser tests',
Expand Down Expand Up @@ -458,9 +474,16 @@ def update_manifest(self, **kwargs):
return run_update(self.context.topdir, **kwargs)

@Command('fmt',
description='Format the Rust source files with rustfmt',
description='Format the Rust and CPP source files with rustfmt and clang-format',
category='testing')
def format_code(self, **kwargs):
@CommandArgument('--no-cpp', default=False, action="store_true", help="Skip CPP files")
def format_code(self, no_cpp):

if not no_cpp:
available, cmd, files = setup_clangfmt(True)
if available and len(files) > 0:
check_call([cmd, "-i"] + files)

self.install_rustfmt()
return self.call_rustup_run(["cargo", "fmt"])

Expand Down Expand Up @@ -774,6 +797,25 @@ def create_parser_create():
return p


def setup_clangfmt(all_files):
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']
if not all_files:
gitcmd.append('-m')
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>
Expand Down

0 comments on commit 70823e3

Please sign in to comment.