Skip to content

Commit 80d466f

Browse files
authored
Merge pull request #18116 from github/redsun82/rust-perf-measures
Rust: add some performance diagnostics
2 parents 9c4030e + 31b9b3a commit 80d466f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+966
-131
lines changed

Cargo.lock

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

MODULE.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ use_repo(py_deps, "vendor__anyhow-1.0.44", "vendor__cc-1.0.70", "vendor__clap-2.
6868
# deps for ruby+rust
6969
# keep in sync by running `misc/bazel/3rdparty/update_cargo_deps.sh`
7070
tree_sitter_extractors_deps = use_extension("//misc/bazel/3rdparty:tree_sitter_extractors_extension.bzl", "r")
71-
use_repo(tree_sitter_extractors_deps, "vendor__anyhow-1.0.93", "vendor__argfile-0.2.1", "vendor__chrono-0.4.38", "vendor__clap-4.5.20", "vendor__dunce-1.0.5", "vendor__encoding-0.2.33", "vendor__figment-0.10.19", "vendor__flate2-1.0.34", "vendor__glob-0.3.1", "vendor__globset-0.4.15", "vendor__itertools-0.10.5", "vendor__itertools-0.13.0", "vendor__lazy_static-1.5.0", "vendor__log-0.4.22", "vendor__num-traits-0.2.19", "vendor__num_cpus-1.16.0", "vendor__proc-macro2-1.0.89", "vendor__quote-1.0.37", "vendor__ra_ap_base_db-0.0.232", "vendor__ra_ap_cfg-0.0.232", "vendor__ra_ap_hir-0.0.232", "vendor__ra_ap_hir_def-0.0.232", "vendor__ra_ap_hir_expand-0.0.232", "vendor__ra_ap_ide_db-0.0.232", "vendor__ra_ap_intern-0.0.232", "vendor__ra_ap_load-cargo-0.0.232", "vendor__ra_ap_parser-0.0.232", "vendor__ra_ap_paths-0.0.232", "vendor__ra_ap_project_model-0.0.232", "vendor__ra_ap_span-0.0.232", "vendor__ra_ap_syntax-0.0.232", "vendor__ra_ap_vfs-0.0.232", "vendor__rand-0.8.5", "vendor__rayon-1.10.0", "vendor__regex-1.11.1", "vendor__serde-1.0.214", "vendor__serde_json-1.0.132", "vendor__serde_with-3.11.0", "vendor__stderrlog-0.6.0", "vendor__syn-2.0.87", "vendor__tracing-0.1.40", "vendor__tracing-subscriber-0.3.18", "vendor__tree-sitter-0.24.4", "vendor__tree-sitter-embedded-template-0.23.2", "vendor__tree-sitter-json-0.24.8", "vendor__tree-sitter-ql-0.23.1", "vendor__tree-sitter-ruby-0.23.1", "vendor__triomphe-0.1.14", "vendor__ungrammar-1.16.1")
71+
use_repo(tree_sitter_extractors_deps, "vendor__anyhow-1.0.93", "vendor__argfile-0.2.1", "vendor__chrono-0.4.38", "vendor__clap-4.5.20", "vendor__dunce-1.0.5", "vendor__encoding-0.2.33", "vendor__figment-0.10.19", "vendor__flate2-1.0.34", "vendor__glob-0.3.1", "vendor__globset-0.4.15", "vendor__itertools-0.10.5", "vendor__itertools-0.13.0", "vendor__lazy_static-1.5.0", "vendor__log-0.4.22", "vendor__num-traits-0.2.19", "vendor__num_cpus-1.16.0", "vendor__proc-macro2-1.0.89", "vendor__quote-1.0.37", "vendor__ra_ap_base_db-0.0.232", "vendor__ra_ap_cfg-0.0.232", "vendor__ra_ap_hir-0.0.232", "vendor__ra_ap_hir_def-0.0.232", "vendor__ra_ap_hir_expand-0.0.232", "vendor__ra_ap_ide_db-0.0.232", "vendor__ra_ap_intern-0.0.232", "vendor__ra_ap_load-cargo-0.0.232", "vendor__ra_ap_parser-0.0.232", "vendor__ra_ap_paths-0.0.232", "vendor__ra_ap_project_model-0.0.232", "vendor__ra_ap_span-0.0.232", "vendor__ra_ap_syntax-0.0.232", "vendor__ra_ap_vfs-0.0.232", "vendor__rand-0.8.5", "vendor__rayon-1.10.0", "vendor__regex-1.11.1", "vendor__serde-1.0.214", "vendor__serde_json-1.0.133", "vendor__serde_with-3.11.0", "vendor__stderrlog-0.6.0", "vendor__syn-2.0.87", "vendor__tracing-0.1.40", "vendor__tracing-subscriber-0.3.18", "vendor__tree-sitter-0.24.4", "vendor__tree-sitter-embedded-template-0.23.2", "vendor__tree-sitter-json-0.24.8", "vendor__tree-sitter-ql-0.23.1", "vendor__tree-sitter-ruby-0.23.1", "vendor__triomphe-0.1.14", "vendor__ungrammar-1.16.1")
7272

7373
dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet")
7474
dotnet.toolchain(dotnet_version = "9.0.100")

misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo_metadata-0.18.1.bazel

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.232.bazel

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.232.bazel

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.132.bazel renamed to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.133.bazel

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl

Lines changed: 9 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

misc/codegen/generators/dbschemegen.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ def cls_to_dbscheme(cls: schema.Class, lookup: typing.Dict[str, schema.Class], a
110110

111111
def get_declarations(data: schema.Schema):
112112
add_or_none_except = data.root_class.name if data.null else None
113-
declarations = [d for cls in data.classes.values() for d in cls_to_dbscheme(cls, data.classes, add_or_none_except)]
113+
declarations = [d for cls in data.classes.values() if not cls.imported for d in cls_to_dbscheme(cls,
114+
data.classes, add_or_none_except)]
114115
if data.null:
115116
property_classes = {
116117
prop.type for cls in data.classes.values() for prop in cls.properties

misc/codegen/generators/qlgen.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,17 @@ def _get_doc(cls: schema.Class, prop: schema.Property, plural=None):
105105
return f"{prop_name} of this {class_name}"
106106

107107

108-
def get_ql_property(cls: schema.Class, prop: schema.Property, lookup: typing.Dict[str, schema.Class],
108+
def _type_is_hideable(t: str, lookup: typing.Dict[str, schema.ClassBase]) -> bool:
109+
if t in lookup:
110+
match lookup[t]:
111+
case schema.Class() as cls:
112+
return "ql_hideable" in cls.pragmas
113+
return False
114+
115+
116+
def get_ql_property(cls: schema.Class, prop: schema.Property, lookup: typing.Dict[str, schema.ClassBase],
109117
prev_child: str = "") -> ql.Property:
118+
110119
args = dict(
111120
type=prop.type if not prop.is_predicate else "predicate",
112121
qltest_skip="qltest_skip" in prop.pragmas,
@@ -116,7 +125,8 @@ def get_ql_property(cls: schema.Class, prop: schema.Property, lookup: typing.Dic
116125
is_unordered=prop.is_unordered,
117126
description=prop.description,
118127
synth=bool(cls.synth) or prop.synth,
119-
type_is_hideable="ql_hideable" in lookup[prop.type].pragmas if prop.type in lookup else False,
128+
type_is_hideable=_type_is_hideable(prop.type, lookup),
129+
type_is_codegen_class=prop.type in lookup and not lookup[prop.type].imported,
120130
internal="ql_internal" in prop.pragmas,
121131
)
122132
ql_name = prop.pragmas.get("ql_name", prop.name)
@@ -155,7 +165,7 @@ def get_ql_property(cls: schema.Class, prop: schema.Property, lookup: typing.Dic
155165
return ql.Property(**args)
156166

157167

158-
def get_ql_class(cls: schema.Class, lookup: typing.Dict[str, schema.Class]) -> ql.Class:
168+
def get_ql_class(cls: schema.Class, lookup: typing.Dict[str, schema.ClassBase]) -> ql.Class:
159169
if "ql_name" in cls.pragmas:
160170
raise Error("ql_name is not supported yet for classes, only for properties")
161171
prev_child = ""
@@ -392,14 +402,15 @@ def generate(opts, renderer):
392402

393403
data = schemaloader.load_file(input)
394404

395-
classes = {name: get_ql_class(cls, data.classes) for name, cls in data.classes.items()}
405+
classes = {name: get_ql_class(cls, data.classes) for name, cls in data.classes.items() if not cls.imported}
396406
if not classes:
397407
raise NoClasses
398408
root = next(iter(classes.values()))
399409
if root.has_children:
400410
raise RootElementHasChildren(root)
401411

402-
imports = {}
412+
pre_imports = {n: cls.module for n, cls in data.classes.items() if cls.imported}
413+
imports = dict(pre_imports)
403414
imports_impl = {}
404415
classes_used_by = {}
405416
cfg_classes = []
@@ -411,7 +422,7 @@ def generate(opts, renderer):
411422
force=opts.force) as renderer:
412423

413424
db_classes = [cls for name, cls in classes.items() if not data.classes[name].synth]
414-
renderer.render(ql.DbClasses(db_classes), out / "Raw.qll")
425+
renderer.render(ql.DbClasses(classes=db_classes, imports=sorted(set(pre_imports.values()))), out / "Raw.qll")
415426

416427
classes_by_dir_and_name = sorted(classes.values(), key=lambda cls: (cls.dir, cls.name))
417428
for c in classes_by_dir_and_name:
@@ -440,6 +451,8 @@ def generate(opts, renderer):
440451
renderer.render(cfg_classes_val, cfg_qll)
441452

442453
for c in data.classes.values():
454+
if c.imported:
455+
continue
443456
path = _get_path(c)
444457
path_impl = _get_path_impl(c)
445458
stub_file = stub_out / path_impl
@@ -458,20 +471,23 @@ def generate(opts, renderer):
458471
renderer.render(class_public, class_public_file)
459472

460473
# for example path/to/elements -> path/to/elements.qll
461-
renderer.render(ql.ImportList([i for name, i in imports.items() if not classes[name].internal]),
474+
renderer.render(ql.ImportList([i for name, i in imports.items() if name not in classes or not classes[name].internal]),
462475
include_file)
463476

464477
elements_module = get_import(include_file, opts.root_dir)
465478

466479
renderer.render(
467480
ql.GetParentImplementation(
468481
classes=list(classes.values()),
469-
imports=[elements_module] + [i for name, i in imports.items() if classes[name].internal],
482+
imports=[elements_module] + [i for name,
483+
i in imports.items() if name in classes and classes[name].internal],
470484
),
471485
out / 'ParentChild.qll')
472486

473487
if test_out:
474488
for c in data.classes.values():
489+
if c.imported:
490+
continue
475491
if should_skip_qltest(c, data.classes):
476492
continue
477493
test_with_name = c.pragmas.get("qltest_test_with")
@@ -501,7 +517,8 @@ def generate(opts, renderer):
501517
constructor_imports = []
502518
synth_constructor_imports = []
503519
stubs = {}
504-
for cls in sorted(data.classes.values(), key=lambda cls: (cls.group, cls.name)):
520+
for cls in sorted((cls for cls in data.classes.values() if not cls.imported),
521+
key=lambda cls: (cls.group, cls.name)):
505522
synth_type = get_ql_synth_class(cls)
506523
if synth_type.is_final:
507524
final_synth_types.append(synth_type)

0 commit comments

Comments
 (0)