Beispiel #1
0
    "./source/extensions/filters/http/squash/squash_filter.cc",
    "./source/server/http/admin.h", "./source/server/http/admin.cc",
    "./tools/clang_tools/api_booster/main.cc",
    "./tools/clang_tools/api_booster/proto_cxx_utils.cc")

# Only one C++ file should instantiate grpc_init
GRPC_INIT_WHITELIST = ("./source/common/grpc/google_grpc_context.cc")

CLANG_FORMAT_PATH = os.getenv("CLANG_FORMAT", "clang-format-9")
BUILDIFIER_PATH = paths.getBuildifier()
BUILDOZER_PATH = paths.getBuildozer()
ENVOY_BUILD_FIXER_PATH = os.path.join(
    os.path.dirname(os.path.abspath(sys.argv[0])), "envoy_build_fixer.py")
HEADER_ORDER_PATH = os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])),
                                 "header_order.py")
SUBDIR_SET = set(common.includeDirOrder())
INCLUDE_ANGLE = "#include <"
INCLUDE_ANGLE_LEN = len(INCLUDE_ANGLE)
PROTO_PACKAGE_REGEX = re.compile(r"^package (\S+);\n*", re.MULTILINE)
X_ENVOY_USED_DIRECTLY_REGEX = re.compile(r'.*\"x-envoy-.*\".*')

# yapf: disable
PROTOBUF_TYPE_ERRORS = {
    # Well-known types should be referenced from the ProtobufWkt namespace.
    "Protobuf::Any":                    "ProtobufWkt::Any",
    "Protobuf::Empty":                  "ProtobufWkt::Empty",
    "Protobuf::ListValue":              "ProtobufWkt::ListValue",
    "Protobuf::NULL_VALUE":             "ProtobufWkt::NULL_VALUE",
    "Protobuf::StringValue":            "ProtobufWkt::StringValue",
    "Protobuf::Struct":                 "ProtobufWkt::Struct",
    "Protobuf::Value":                  "ProtobufWkt::Value",
Beispiel #2
0
EXCLUDED_PREFIXES = ("./generated/", "./thirdparty/", "./build", "./.git/",
                     "./bazel-", "./bazel/external", "./.cache")
SUFFIXES = (".cc", ".h", "BUILD", ".md", ".rst")
DOCS_SUFFIX = (".md", ".rst")

# Files in these paths can make reference to protobuf stuff directly
GOOGLE_PROTOBUF_WHITELIST = ('ci/prebuilt', 'source/common/protobuf')

CLANG_FORMAT_PATH = os.getenv("CLANG_FORMAT", "clang-format-5.0")
BUILDIFIER_PATH = os.getenv("BUILDIFIER_BIN", "$GOPATH/bin/buildifier")
ENVOY_BUILD_FIXER_PATH = os.path.join(
    os.path.dirname(os.path.abspath(sys.argv[0])), "envoy_build_fixer.py")
HEADER_ORDER_PATH = os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])),
                                 "header_order.py")
SUBDIR_SET = set(common.includeDirOrder())
INCLUDE_ANGLE = "#include <"
INCLUDE_ANGLE_LEN = len(INCLUDE_ANGLE)

PROTOBUF_TYPE_ERRORS = {
    # Well-known types should be referenced from the ProtobufWkt namespace.
    "Protobuf::Any": "ProtobufWkt::Any",
    "Protobuf::Empty": "ProtobufWkt::Empty",
    "Protobuf::ListValue": "ProtobufWkt:ListValue",
    "Protobuf::NULL_VALUE": "ProtobufWkt::NULL_VALUE",
    "Protobuf::StringValue": "ProtobufWkt::StringValue",
    "Protobuf::Struct": "ProtobufWkt::Struct",
    "Protobuf::Value": "ProtobufWkt::Value",

    # Maps including strings should use the protobuf string types.
    "Protobuf::MapPair<std::string":
Beispiel #3
0
    return '\n'.join(
        filter(lambda x: x, [
            '\n'.join(before_includes_lines),
            reordered_includes_lines,
            '\n'.join(after_includes_lines),
        ]))


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Header reordering.')
    parser.add_argument('--path',
                        type=str,
                        help='specify the path to the header file')
    parser.add_argument('--rewrite',
                        action='store_true',
                        help='rewrite header file in-place')
    parser.add_argument(
        '--include_dir_order',
        type=str,
        default=','.join(common.includeDirOrder()),
        help='specify the header block include directory order')
    args = parser.parse_args()
    target_path = args.path
    include_dir_order = args.include_dir_order.split(',')
    reorderd_source = ReorderHeaders(target_path)
    if args.rewrite:
        pathlib.Path(target_path).write_text(reorderd_source, encoding='utf-8')
    else:
        sys.stdout.buffer.write(reorderd_source.encode('utf-8'))
Beispiel #4
0
                     "./bazel-", "./bazel/external", "./.cache",
                     "./tools/testdata/check_format/")
SUFFIXES = (".cc", ".h", "BUILD", ".md", ".rst", ".proto")
DOCS_SUFFIX = (".md", ".rst")
PROTO_SUFFIX = (".proto")

# Files in these paths can make reference to protobuf stuff directly
GOOGLE_PROTOBUF_WHITELIST = ('ci/prebuilt', 'source/common/protobuf', 'api/test')

CLANG_FORMAT_PATH = os.getenv("CLANG_FORMAT", "clang-format-5.0")
BUILDIFIER_PATH = os.getenv("BUILDIFIER_BIN", "$GOPATH/bin/buildifier")
ENVOY_BUILD_FIXER_PATH = os.path.join(
    os.path.dirname(os.path.abspath(sys.argv[0])), "envoy_build_fixer.py")
HEADER_ORDER_PATH = os.path.join(
    os.path.dirname(os.path.abspath(sys.argv[0])), "header_order.py")
SUBDIR_SET = set(common.includeDirOrder())
INCLUDE_ANGLE = "#include <"
INCLUDE_ANGLE_LEN = len(INCLUDE_ANGLE)

PROTOBUF_TYPE_ERRORS = {
    # Well-known types should be referenced from the ProtobufWkt namespace.
    "Protobuf::Any":                    "ProtobufWkt::Any",
    "Protobuf::Empty":                  "ProtobufWkt::Empty",
    "Protobuf::ListValue":              "ProtobufWkt::ListValue",
    "Protobuf::NULL_VALUE":             "ProtobufWkt::NULL_VALUE",
    "Protobuf::StringValue":            "ProtobufWkt::StringValue",
    "Protobuf::Struct":                 "ProtobufWkt::Struct",
    "Protobuf::Value":                  "ProtobufWkt::Value",

    # Maps including strings should use the protobuf string types.
    "Protobuf::MapPair<std::string":    "Protobuf::MapPair<Envoy::ProtobufTypes::String",
Beispiel #5
0
def ReorderHeaders(path):
    with open(path, 'r') as f:
        source = f.read()

    all_lines = iter(source.split('\n'))
    before_includes_lines = []
    includes_lines = []
    after_includes_lines = []

    # Collect all the lines prior to the first #include in before_includes_lines.
    try:
        while True:
            line = next(all_lines)
            if line.startswith('#include'):
                includes_lines.append(line)
                break
            before_includes_lines.append(line)
    except StopIteration:
        pass

    # Collect all the #include and whitespace lines in includes_lines.
    try:
        while True:
            line = next(all_lines)
            if not line:
                continue
            if not line.startswith('#include'):
                after_includes_lines.append(line)
                break
            includes_lines.append(line)
    except StopIteration:
        pass

    # Collect the remaining lines in after_includes_lines.
    after_includes_lines += list(all_lines)

    # Filter for includes that finds the #include of the header file associated with the source file
    # being processed. E.g. if 'path' is source/common/common/hex.cc, this filter matches
    # "common/common/hex.h".
    def file_header_filter():
        return lambda f: f.endswith('.h"') and path.endswith(f[1:-3] + '.cc')

    def regex_filter(regex):
        return lambda f: re.match(regex, f)

    # Filters that define the #include blocks
    block_filters = [
        file_header_filter(),
        regex_filter('<.*\.h>'),
        regex_filter('<.*>'),
    ]
    for subdir in common.includeDirOrder():
        block_filters.append(regex_filter('"' + subdir + '/.*"'))

    blocks = []
    already_included = set([])
    for b in block_filters:
        block = []
        for line in includes_lines:
            header = line[len('#include '):]
            if line not in already_included and b(header):
                block.append(line)
                already_included.add(line)
        if len(block) > 0:
            blocks.append(block)

    # Anything not covered by block_filters gets its own block.
    misc_headers = list(set(includes_lines).difference(already_included))
    if len(misc_headers) > 0:
        blocks.append(misc_headers)

    reordered_includes_lines = '\n\n'.join(
        ['\n'.join(sorted(block)) for block in blocks])

    if reordered_includes_lines:
        reordered_includes_lines += '\n'

    return '\n'.join(
        filter(lambda x: x, [
            '\n'.join(before_includes_lines),
            reordered_includes_lines,
            '\n'.join(after_includes_lines),
        ]))
Beispiel #6
0
def ReorderHeaders(path):
  with open(path, 'r') as f:
    source = f.read()

  all_lines = iter(source.split('\n'))
  before_includes_lines = []
  includes_lines = []
  after_includes_lines = []

  # Collect all the lines prior to the first #include in before_includes_lines.
  try:
    while True:
      line = all_lines.next()
      if line.startswith('#include'):
        includes_lines.append(line)
        break
      before_includes_lines.append(line)
  except StopIteration:
    pass

  # Collect all the #include and whitespace lines in includes_lines.
  try:
    while True:
      line = all_lines.next()
      if not line:
        continue
      if not line.startswith('#include'):
        after_includes_lines.append(line)
        break
      includes_lines.append(line)
  except StopIteration:
    pass

  # Collect the remaining lines in after_includes_lines.
  after_includes_lines += list(all_lines)

  # Filter for includes that finds the #include of the header file associated with the source file
  # being processed. E.g. if 'path' is source/common/common/hex.cc, this filter matches
  # "common/common/hex.h".
  def file_header_filter():
    return lambda f: f.endswith('.h"') and path.endswith(f[1:-3] + '.cc')

  def regex_filter(regex):
    return lambda f: re.match(regex, f)

  # Filters that define the #include blocks
  block_filters = [
      file_header_filter(),
      regex_filter('<.*\.h>'),
      regex_filter('<.*>'),
  ]
  for subdir in common.includeDirOrder():
    block_filters.append(regex_filter('"' + subdir + '/.*"'))

  blocks = []
  already_included = set([])
  for b in block_filters:
    block = []
    for line in includes_lines:
      header = line[len('#include '):]
      if line not in already_included and b(header):
        block.append(line)
        already_included.add(line)
    if len(block) > 0:
      blocks.append(block)

  # Anything not covered by block_filters gets its own block.
  misc_headers = list(set(includes_lines).difference(already_included))
  if len(misc_headers) > 0:
    blocks.append(misc_headers)

  reordered_includes_lines = '\n\n'.join(
      ['\n'.join(sorted(block)) for block in blocks])

  if reordered_includes_lines:
    reordered_includes_lines += '\n'

  return '\n'.join(
      filter(lambda x: x, [
          '\n'.join(before_includes_lines),
          reordered_includes_lines,
          '\n'.join(after_includes_lines),
      ]))