mirror of
https://github.com/dart-lang/sdk
synced 2024-09-05 00:13:50 +00:00
![Daco Harkes](/assets/img/avatar_default.png)
After https://dart-review.googlesource.com/c/sdk/+/116527 was landed, running the analyzer on the sdk root produces 14k+ messages instead of 2k+ messages. Note 1800 of those 2200 messages are TODOs. Change-Id: I9d75924b83ac9e2c42fd2ce4ca64b73d55c8fc53 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/118987 Commit-Queue: Daco Harkes <dacoharkes@google.com> Auto-Submit: Daco Harkes <dacoharkes@google.com> Reviewed-by: Vijay Menon <vsm@google.com>
156 lines
4 KiB
Python
Executable file
156 lines
4 KiB
Python
Executable file
#!/usr/bin/python
|
|
#
|
|
# Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
|
|
# for details. All rights reserved. Use of this source code is governed by a
|
|
# BSD-style license that can be found in the LICENSE file.
|
|
"""Script to generate configuration files for analysis servers of C++ and Dart.
|
|
|
|
It generates compile_commands.json for C++ clang and intellij and
|
|
analysis_options.yaml for the Dart analyzer.
|
|
"""
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
import generate_buildfiles
|
|
import utils
|
|
|
|
HOST_OS = utils.GuessOS()
|
|
|
|
|
|
def GenerateIdeFiles(options):
|
|
GenerateCompileCommands(options)
|
|
GenerateAnalysisOptions(options)
|
|
|
|
|
|
def GenerateCompileCommands(options):
|
|
"""Generate compile_commands.json for the C++ analysis servers.
|
|
|
|
compile_commands.json is used by the c++ clang and intellij language analysis
|
|
servers used in IDEs such as Visual Studio Code and Emacs.
|
|
|
|
Args:
|
|
options: supported options include: verbose, force, dir
|
|
|
|
Returns:
|
|
success (0) or failure (non zero)
|
|
"""
|
|
|
|
fname = os.path.join(options.dir, "compile_commands.json")
|
|
|
|
if os.path.isfile(fname) and not options.force:
|
|
print fname + " already exists, use --force to override"
|
|
return
|
|
|
|
gn_result = generate_buildfiles.RunGn(options)
|
|
if gn_result != 0:
|
|
return gn_result
|
|
|
|
out_folder = utils.GetBuildRoot(
|
|
HOST_OS, mode="debug", arch=options.arch, target_os=options.os)
|
|
|
|
if not os.path.isdir(out_folder):
|
|
return 1
|
|
|
|
command_set = json.loads(
|
|
subprocess.check_output(
|
|
["ninja", "-C", out_folder, "-t", "compdb", "cxx", "cc", "h"]))
|
|
|
|
commands = []
|
|
for obj in command_set:
|
|
command = obj["command"]
|
|
|
|
# Skip precompiled mode, a lot of code is commented out in precompiled mode
|
|
if "-DDART_PRECOMPILED_RUNTIME" in command:
|
|
continue
|
|
|
|
# Remove warnings
|
|
command = command.replace("-Werror", "")
|
|
|
|
obj["command"] = command
|
|
commands += [obj]
|
|
|
|
with open(fname, "w") as f:
|
|
json.dump(commands, f, indent=4)
|
|
|
|
return 0
|
|
|
|
|
|
def GenerateAnalysisOptions(options):
|
|
"""Generate analysis_optioms.yaml for the Dart analyzer.
|
|
|
|
To prevent dartanalyzer from tripping on the non-Dart files when it is
|
|
started from the root dart-sdk directory.
|
|
https://github.com/dart-lang/sdk/issues/35562
|
|
|
|
Args:
|
|
options: supported options include: force, dir
|
|
"""
|
|
contents = """analyzer:
|
|
exclude:
|
|
- docs/newsletter/20171103/**
|
|
- out/**
|
|
- runtime/**
|
|
- samples-dev/swarm/**
|
|
- sdk/lib/**
|
|
- sdk_nnbd/lib/**
|
|
- tests/**
|
|
- third_party/observatory_pub_packages/**
|
|
- third_party/pkg/**
|
|
- third_party/pkg_tested/dart_style/**
|
|
- third_party/tcmalloc/**
|
|
- tools/apps/update_homebrew/**
|
|
- tools/dart2js/**
|
|
- tools/dom/**
|
|
- tools/sdks/dart-sdk/lib/**
|
|
- tools/status_clean.dart
|
|
- xcodebuild/**"""
|
|
|
|
fname = os.path.join(options.dir, "analysis_options.yaml")
|
|
|
|
if os.path.isfile(fname) and not options.force:
|
|
print fname + " already exists, use --force to override"
|
|
return
|
|
|
|
with open(fname, "w") as f:
|
|
f.write(contents)
|
|
|
|
|
|
def main(argv):
|
|
parser = argparse.ArgumentParser(
|
|
description="Python script to generate compile_commands.json and "
|
|
"analysis_options.yaml which are used by the analysis servers for "
|
|
"c++ and Dart.")
|
|
|
|
parser.add_argument(
|
|
"-v", "--verbose", help="Verbose output.", action="store_true")
|
|
|
|
parser.add_argument(
|
|
"-f", "--force", help="Override files.", action="store_true")
|
|
|
|
parser.add_argument(
|
|
"-d", "--dir", help="Target directory.", default=utils.DART_DIR)
|
|
|
|
parser.add_argument(
|
|
"-a",
|
|
"--arch",
|
|
help="Target architecture for runtime sources.",
|
|
default="x64")
|
|
|
|
parser.add_argument(
|
|
"-s",
|
|
"--os",
|
|
help="Target operating system for runtime sources.",
|
|
default=HOST_OS)
|
|
|
|
options = parser.parse_args(argv[1:])
|
|
|
|
return GenerateIdeFiles(options)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main(sys.argv))
|