mirror of
https://github.com/servo/servo.git
synced 2025-08-20 04:45:33 +01:00
Standardize on Black for Python code in mozilla-central
.
Allow-list all Python code in tree for use with the black linter, and re-format all code in-tree accordingly. To produce this patch I did all of the following: 1. Make changes to tools/lint/black.yml to remove include: stanza and update list of source extensions. 2. Run ./mach lint --linter black --fix 3. Make some ad-hoc manual updates to python/mozbuild/mozbuild/test/configure/test_configure.py -- it has some hard-coded line numbers that the reformat breaks. 4. Add a set of exclusions to black.yml. These will be deleted in a follow-up bug (1672023). Differential Revision: https://phabricator.services.mozilla.com/D94045
This commit is contained in:
parent
a497b033dc
commit
8a723d48d5
4 changed files with 318 additions and 191 deletions
|
@ -10,21 +10,33 @@ import sys
|
|||
|
||||
from io import BytesIO
|
||||
|
||||
GECKO_DIR = os.path.dirname(__file__.replace('\\', '/'))
|
||||
GECKO_DIR = os.path.dirname(__file__.replace("\\", "/"))
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(GECKO_DIR), "properties"))
|
||||
|
||||
import build
|
||||
|
||||
|
||||
# Matches lines like `GK_ATOM(foo, "foo", 0x12345678, true, nsStaticAtom, PseudoElementAtom)`.
|
||||
PATTERN = re.compile('^GK_ATOM\(([^,]*),[^"]*"([^"]*)",\s*(0x[0-9a-f]+),\s*[^,]*,\s*([^,]*),\s*([^)]*)\)',
|
||||
re.MULTILINE)
|
||||
PATTERN = re.compile(
|
||||
'^GK_ATOM\(([^,]*),[^"]*"([^"]*)",\s*(0x[0-9a-f]+),\s*[^,]*,\s*([^,]*),\s*([^)]*)\)',
|
||||
re.MULTILINE,
|
||||
)
|
||||
FILE = "include/nsGkAtomList.h"
|
||||
|
||||
|
||||
def map_atom(ident):
|
||||
if ident in {"box", "loop", "match", "mod", "ref",
|
||||
"self", "type", "use", "where", "in"}:
|
||||
if ident in {
|
||||
"box",
|
||||
"loop",
|
||||
"match",
|
||||
"mod",
|
||||
"ref",
|
||||
"self",
|
||||
"type",
|
||||
"use",
|
||||
"where",
|
||||
"in",
|
||||
}:
|
||||
return ident + "_"
|
||||
return ident
|
||||
|
||||
|
@ -42,7 +54,11 @@ class Atom:
|
|||
# or "InheritingAnonBox".
|
||||
self.atom_type = atom_type
|
||||
|
||||
if self.is_pseudo_element() or self.is_anon_box() or self.is_tree_pseudo_element():
|
||||
if (
|
||||
self.is_pseudo_element()
|
||||
or self.is_anon_box()
|
||||
or self.is_tree_pseudo_element()
|
||||
):
|
||||
self.pseudo_ident = (ident.split("_", 1))[1]
|
||||
|
||||
if self.is_anon_box():
|
||||
|
@ -82,34 +98,42 @@ def collect_atoms(objdir):
|
|||
with open(path) as f:
|
||||
content = f.read()
|
||||
for result in PATTERN.finditer(content):
|
||||
atoms.append(Atom(result.group(1), result.group(2), result.group(3),
|
||||
result.group(4), result.group(5)))
|
||||
atoms.append(
|
||||
Atom(
|
||||
result.group(1),
|
||||
result.group(2),
|
||||
result.group(3),
|
||||
result.group(4),
|
||||
result.group(5),
|
||||
)
|
||||
)
|
||||
return atoms
|
||||
|
||||
|
||||
class FileAvoidWrite(BytesIO):
|
||||
"""File-like object that buffers output and only writes if content changed."""
|
||||
|
||||
def __init__(self, filename):
|
||||
BytesIO.__init__(self)
|
||||
self.name = filename
|
||||
|
||||
def write(self, buf):
|
||||
if isinstance(buf, str):
|
||||
buf = buf.encode('utf-8')
|
||||
buf = buf.encode("utf-8")
|
||||
BytesIO.write(self, buf)
|
||||
|
||||
def close(self):
|
||||
buf = self.getvalue()
|
||||
BytesIO.close(self)
|
||||
try:
|
||||
with open(self.name, 'rb') as f:
|
||||
with open(self.name, "rb") as f:
|
||||
old_content = f.read()
|
||||
if old_content == buf:
|
||||
print("{} is not changed, skip".format(self.name))
|
||||
return
|
||||
except IOError:
|
||||
pass
|
||||
with open(self.name, 'wb') as f:
|
||||
with open(self.name, "wb") as f:
|
||||
f.write(buf)
|
||||
|
||||
def __enter__(self):
|
||||
|
@ -120,45 +144,57 @@ class FileAvoidWrite(BytesIO):
|
|||
self.close()
|
||||
|
||||
|
||||
PRELUDE = '''
|
||||
PRELUDE = """
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
// Autogenerated file created by components/style/gecko/regen_atoms.py.
|
||||
// DO NOT EDIT DIRECTLY
|
||||
'''[1:]
|
||||
"""[
|
||||
1:
|
||||
]
|
||||
|
||||
RULE_TEMPLATE = '''
|
||||
RULE_TEMPLATE = """
|
||||
("{atom}") => {{{{
|
||||
#[allow(unsafe_code)] #[allow(unused_unsafe)]
|
||||
unsafe {{ $crate::string_cache::Atom::from_index_unchecked({index}) }}
|
||||
}}}};
|
||||
'''[1:]
|
||||
"""[
|
||||
1:
|
||||
]
|
||||
|
||||
MACRO_TEMPLATE = '''
|
||||
MACRO_TEMPLATE = """
|
||||
/// Returns a static atom by passing the literal string it represents.
|
||||
#[macro_export]
|
||||
macro_rules! atom {{
|
||||
{body}\
|
||||
}}
|
||||
'''
|
||||
"""
|
||||
|
||||
|
||||
def write_atom_macro(atoms, file_name):
|
||||
with FileAvoidWrite(file_name) as f:
|
||||
f.write(PRELUDE)
|
||||
macro_rules = [RULE_TEMPLATE.format(atom=atom.value, name=atom.ident, index=i)
|
||||
for (i, atom) in enumerate(atoms)]
|
||||
f.write(MACRO_TEMPLATE.format(body=''.join(macro_rules)))
|
||||
macro_rules = [
|
||||
RULE_TEMPLATE.format(atom=atom.value, name=atom.ident, index=i)
|
||||
for (i, atom) in enumerate(atoms)
|
||||
]
|
||||
f.write(MACRO_TEMPLATE.format(body="".join(macro_rules)))
|
||||
|
||||
|
||||
def write_pseudo_elements(atoms, target_filename):
|
||||
pseudos = []
|
||||
for atom in atoms:
|
||||
if atom.type() == "nsCSSPseudoElementStaticAtom" or atom.type() == "nsCSSAnonBoxPseudoStaticAtom":
|
||||
if (
|
||||
atom.type() == "nsCSSPseudoElementStaticAtom"
|
||||
or atom.type() == "nsCSSAnonBoxPseudoStaticAtom"
|
||||
):
|
||||
pseudos.append(atom)
|
||||
|
||||
pseudo_definition_template = os.path.join(GECKO_DIR, "pseudo_element_definition.mako.rs")
|
||||
pseudo_definition_template = os.path.join(
|
||||
GECKO_DIR, "pseudo_element_definition.mako.rs"
|
||||
)
|
||||
print("cargo:rerun-if-changed={}".format(pseudo_definition_template))
|
||||
contents = build.render(pseudo_definition_template, PSEUDOS=pseudos)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue