Skip to content

Layer checking as products pass over edges#704

Open
beojan wants to merge 3 commits into
Framework-R-D:mainfrom
beojan:layer-checking
Open

Layer checking as products pass over edges#704
beojan wants to merge 3 commits into
Framework-R-D:mainfrom
beojan:layer-checking

Conversation

@beojan

@beojan beojan commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

As discussed, layer checking happens dynamically as products pass over edges. A product selector without a layer specification would (in theory) accept products from any layer and place outputs appropriately so the layer a product belongs to need not be constant between iterations.

Layer specifications remain mandatory in selectors for now. Ironically until now they weren't actually being checked at all except when matching to products from providers.


  • Code

    • Added graph access to declared node types (fold, observer, predicate, transform, unfold) by storing the owning tbb::flow::graph and exposing it via graph() const.
    • Updated producer lookup to return all matching producers instead of a single match.
    • Reworked edge construction to connect a consumer to multiple matching producers when applicable.
    • Added layer-checking flow nodes in products_consumer, so product layer validation now happens as products traverse edges rather than only during producer matching.
    • Adjusted producer ambiguity handling to provide richer disambiguation/error reporting using suffix, creator, and output type signals.
  • Tests

    • Added coverage for selecting products by layer only, verifying the new layer-based traversal behavior with a job-layer transform.
  • Behavior

    • Layer validation is now enforced dynamically during graph traversal, enabling more flexible product flow while preserving current selector requirements.

@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: e762458c-fbe1-426c-895e-1b5d11b8e7f2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Declared nodes now expose their associated TBB flow graph. Producer resolution returns multiple matches with ambiguity checks, computational edges connect all matches, and consumer ports filter messages by layer. A product-selection test covers layer-only selection.

Changes

Product selection flow

Layer / File(s) Summary
Graph-aware layer filtering
phlex/core/declared_*.hpp, phlex/core/products_consumer.*, test/product_selecting.cpp
Declared nodes retain and expose their TBB graph; products_consumer adds layer-check nodes that forward matching messages, and the test validates job-layer-only selection.
Multi-producer edge resolution
phlex/core/producer_catalog.*, phlex/core/make_computational_edges.cpp
Producer lookup returns matching vectors, applies ambiguity checks, and creates edges from every matching producer to the consumer input.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers: marcpaterno

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: validating layers dynamically as products traverse edges.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@beojan beojan requested review from knoepfel and marcpaterno July 9, 2026 22:11
@greenc-FNAL

greenc-FNAL commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

21 fixed, 0 new since branch point (4e8e474)
21 fixed, 0 new since previous report on PR (fb71620)

✅ 21 CodeQL alerts resolved since the previous PR commit

  • Warning # 196 actions/untrusted-checkout-toctou/critical at .github/workflows/clang-tidy-fix.yaml:109:9 — Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
  • Warning # 227 actions/untrusted-checkout-toctou/high at .github/workflows/clang-format-fix.yaml:94:9 — Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
    Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
  • Warning # 228 actions/untrusted-checkout-toctou/high at .github/workflows/python-fix.yaml:94:9 — Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
    Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
  • Warning # 229 actions/untrusted-checkout/high at .github/workflows/clang-format-fix.yaml:94:9 — Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
    Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
  • Warning # 230 actions/untrusted-checkout/high at .github/workflows/python-fix.yaml:94:9 — Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
    Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
  • Warning # 231 actions/untrusted-checkout-toctou/high at .github/workflows/cmake-format-fix.yaml:94:9 — Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
    Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
  • Warning # 232 actions/untrusted-checkout-toctou/high at .github/workflows/jsonnet-format-fix.yaml:95:9 — Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
    Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
  • Warning # 233 actions/untrusted-checkout/high at .github/workflows/cmake-format-fix.yaml:94:9 — Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
    Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
  • Warning # 234 actions/untrusted-checkout/high at .github/workflows/jsonnet-format-fix.yaml:95:9 — Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
    Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
  • Warning # 235 actions/untrusted-checkout/medium at .github/workflows/clang-format-check.yaml:82:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 236 actions/untrusted-checkout/medium at .github/workflows/actionlint-check.yaml:86:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 237 actions/untrusted-checkout/medium at .github/workflows/clang-tidy-check.yaml:59:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 238 actions/untrusted-checkout/medium at .github/workflows/cmake-format-check.yaml:79:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 239 actions/untrusted-checkout/medium at .github/workflows/cmake-build.yaml:159:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 240 actions/untrusted-checkout/medium at .github/workflows/header-guards-check.yaml:82:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 241 actions/untrusted-checkout/medium at .github/workflows/jsonnet-format-check.yaml:79:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 242 actions/untrusted-checkout/medium at .github/workflows/markdown-check.yaml:82:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 243 actions/untrusted-checkout/medium at .github/workflows/python-check.yaml:84:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 244 actions/untrusted-checkout/medium at .github/workflows/yaml-check.yaml:76:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 245 actions/untrusted-checkout-toctou/high at .github/workflows/coverage.yaml:386:9 — Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
  • ✅ …and 1 more alerts (see Code Scanning for the full list).

✅ 21 CodeQL alerts resolved since the branch point

  • Warning # 196 actions/untrusted-checkout-toctou/critical at .github/workflows/clang-tidy-fix.yaml:109:9 — Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
  • Warning # 227 actions/untrusted-checkout-toctou/high at .github/workflows/clang-format-fix.yaml:94:9 — Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
    Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
  • Warning # 228 actions/untrusted-checkout-toctou/high at .github/workflows/python-fix.yaml:94:9 — Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
    Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
  • Warning # 229 actions/untrusted-checkout/high at .github/workflows/clang-format-fix.yaml:94:9 — Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
    Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
  • Warning # 230 actions/untrusted-checkout/high at .github/workflows/python-fix.yaml:94:9 — Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
    Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
  • Warning # 231 actions/untrusted-checkout-toctou/high at .github/workflows/cmake-format-fix.yaml:94:9 — Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
    Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
  • Warning # 232 actions/untrusted-checkout-toctou/high at .github/workflows/jsonnet-format-fix.yaml:95:9 — Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
    Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
  • Warning # 233 actions/untrusted-checkout/high at .github/workflows/cmake-format-fix.yaml:94:9 — Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
    Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
  • Warning # 234 actions/untrusted-checkout/high at .github/workflows/jsonnet-format-fix.yaml:95:9 — Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
    Checkout of untrusted code in a privileged workflow with later potential execution (event trigger: issue_comment).
  • Warning # 235 actions/untrusted-checkout/medium at .github/workflows/clang-format-check.yaml:82:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 236 actions/untrusted-checkout/medium at .github/workflows/actionlint-check.yaml:86:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 237 actions/untrusted-checkout/medium at .github/workflows/clang-tidy-check.yaml:59:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 238 actions/untrusted-checkout/medium at .github/workflows/cmake-format-check.yaml:79:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 239 actions/untrusted-checkout/medium at .github/workflows/cmake-build.yaml:159:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 240 actions/untrusted-checkout/medium at .github/workflows/header-guards-check.yaml:82:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 241 actions/untrusted-checkout/medium at .github/workflows/jsonnet-format-check.yaml:79:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 242 actions/untrusted-checkout/medium at .github/workflows/markdown-check.yaml:82:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 243 actions/untrusted-checkout/medium at .github/workflows/python-check.yaml:84:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 244 actions/untrusted-checkout/medium at .github/workflows/yaml-check.yaml:76:9 — Potential unsafe checkout of untrusted pull request on non-privileged workflow.
  • Warning # 245 actions/untrusted-checkout-toctou/high at .github/workflows/coverage.yaml:386:9 — Insufficient protection against execution of untrusted code on a privileged workflow (issue_comment).
  • ✅ …and 1 more alerts (see Code Scanning for the full list).

Review the full CodeQL report for details.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Clang-Tidy Check Results

Found 5788 issue(s); none are newly introduced by this patch.

All issues by check:

  • readability-identifier-naming: 2132
  • readability-redundant-member-init: 1361
  • portability-template-virtual-member-function: 575
  • performance-unnecessary-value-param: 532
  • readability-avoid-const-params-in-decls: 278
  • modernize-pass-by-value: 215
  • readability-braces-around-statements: 123
  • modernize-use-designated-initializers: 93
  • readability-convert-member-functions-to-static: 85
  • readability-const-return-type: 50
  • modernize-use-auto: 31
  • performance-move-const-arg: 29
  • performance-enum-size: 24
  • readability-qualified-auto: 23
  • readability-redundant-control-flow: 23
  • modernize-use-using: 19
  • modernize-concat-nested-namespaces: 17
  • modernize-use-equals-default: 17
  • readability-math-missing-parentheses: 16
  • readability-function-size: 15
  • modernize-avoid-c-arrays: 15
  • readability-static-definition-in-anonymous-namespace: 14
  • bugprone-branch-clone: 12
  • modernize-return-braced-init-list: 10
  • readability-isolate-declaration: 8
  • modernize-use-starts-ends-with: 8
  • cppcoreguidelines-special-member-functions: 7
  • readability-redundant-access-specifiers: 7
  • modernize-use-ranges: 6
  • readability-inconsistent-declaration-parameter-name: 6
  • bugprone-throw-keyword-missing: 6
  • readability-container-contains: 5
  • readability-redundant-casting: 5
  • readability-container-size-empty: 5
  • modernize-use-std-numbers: 3
  • readability-else-after-return: 2
  • modernize-use-integer-sign-comparison: 2
  • readability-use-anyofallof: 2
  • cppcoreguidelines-rvalue-reference-param-not-moved: 1
  • readability-redundant-string-init: 1
  • modernize-redundant-void-arg: 1
  • modernize-make-shared: 1
  • modernize-use-emplace: 1
  • readability-simplify-boolean-expr: 1
  • performance-avoid-endl: 1

See inline comments for details. Comment @phlexbot tidy-fix to auto-fix.

@beojan

beojan commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fb71620bf9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +157 to +158
for (auto* producer : producer_ports) {
make_edge(*producer->output_port, *receiver_port);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve layer checks for filtered consumers

When a consumer has experimental_when, receiver_port is the filter's collector, so this loop connects every matching producer directly to the filter and never calls node->port(query). The new layer-checking node is only created inside products_consumer::port(), while filter forwards to consumer.ports() (the raw downstream ports), so a filtered node whose selector asks for job can still receive matching event producer messages whenever the predicate accepts those message ids.

Useful? React with 👍 / 👎.

if (suffixes.size() == 1 && creators.size() == 1 && types.size() == 1) {
spdlog::info(msg);
spdlog::info("This is permitted -- layers may differ");
return candidates;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep same-layer duplicate producers ambiguous

This branch permits multiple producers solely because suffix, creator, and type are identical, but the catalog has not checked that the candidates actually differ by layer. In configurations like a transform and a fold registered with the same name and suffix that both emit on the selector's layer, all candidates are returned and connected; the downstream layer checker accepts both, causing duplicate executions instead of the previous ambiguity error.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@codex Can you suggest how I might detect this situation?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex couldn't complete this request. Try again later.

Comment on lines +151 to 153
if (producer_ports.empty()) {
// Is there a way to detect mis-specified product dependencies?
result[node_name].push_back({query, receiver_port});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Fall back when only wrong-layer producers match

Because find_producers() is not layer-aware, a producer on a different layer still makes this branch treat the input as satisfied. In a graph with, for example, an event transform producing suffix number and a job provider for the same suffix/type, a job selector reaches this path, the provider lookup is skipped, and the new layer checker drops the event messages, leaving the consumer with no input instead of using the matching provider or reporting the product as unresolved.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@codex Strictly, those products are also distinguishable by stage name so a stage name should be provided. Our semantics are that where no stage name is provided that ambiguity is resolved by preferring the product in the current stage.

Nevertheless, can you suggest a way to detect this ambiguity where it actually exists?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex couldn't complete this request. Try again later.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@codex Partially resolved by bailing early if a stage name other than "CURRENT" is requested.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex couldn't complete this request. Try again later.

@knoepfel knoepfel left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@beojan, thanks for the PR. I want to check a few things first with you:

  1. Multiple incoming edges to one input port are allowed so long as the source nodes of those incoming edges differ only in the layer.
  2. Assuming (1) is true, that means the only ports that can have multiple incoming edges are those input ports that are connected to provider nodes. All other input ports are connected to nodes that have differing names (where I assume a provider-node name cannot clash with a computational-node name)
  3. Assuming (2) is true, the only layer-checking that is necessary is the following situation: Node B wants to receive only layer p data from Node A, whereas Node A receives both layer p and layer q data from corresponding upstream provider nodes.

Does that accord with your understanding?

{
// create a product to be found
g.fold(
"duplicate_temperature",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should trigger an exception before executing the graph: there's already a transform algorithm named "duplicate_temperature" earlier in the file.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It certainly doesn't appear to.

CHECK(g.execution_count("creator_and_layer_after_transform") == num_events);
}

SECTION("Products from this job, using layer only")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the section above (i.e., SECTION("Layer alone, distinguished by type")) not already cover this case?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, the section above specifies the layer only because layer is a mandatory field. The product lookup is done by type.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But with your changes, wouldn't the lookup then also be done by layer as well?

I'm trying to determine how the construction you've added is different than what's already there...and it's not clear to me how it is.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The selector requires layer to be event and type to be string (LIST char). Before and after my change, the product is uniquely identified by the type alone (i.e. there's only one node producing string products).

In the new test, the layer name is required to disambiguate, since there are two duplicate_temperature nodes producing temperature products of type double in the current stage.

@beojan

beojan commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

1 is how I understand things, 2 evidently seems to be untrue. It appears nodes can share names so long as you don't try to wire them directly to each other.

I'm less sure 1 should be true. If you have one path for generating and simulating MC and another for collecting real data, it doesn't seem to be that useful to say "Phlex can handle both in one stream and deal with the layer hierarchies differing, but only if creator names and product suffixes are identical in both paths".

@beojan

beojan commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

3 also doesn't follow from 2 and 1. If you write a selector that matches some product created by a previous node in every way except the layer is wrong, it shouldn't match anything. Without layer checking, it'll still match.

@knoepfel

Copy link
Copy Markdown
Member

I'm less sure 1 should be true. If you have one path for generating and simulating MC and another for collecting real data, it doesn't seem to be that useful to say "Phlex can handle both in one stream and deal with the layer hierarchies differing, but only if creator names and product suffixes are identical in both paths".

This is a fair point, and I now realize the issue is more nuanced than I thought. If all of the product-selector fields need to be identical except for the layer, then that means that, for the same stage, the algorithm names need to be identical. And I argue that should be an error—nodes in the same stage are currently distinguishable (to the user) via the algorithm name, and thus they should be unique.

So...that means we have a data-product provenance issue we need to disentangle. Will it be a problem for users if not only the data layers differ upon node execution, but also the originating provenance (creator names, stage names, etc.) of the input products? Maybe we can talk about this on Monday?

@github-actions

Copy link
Copy Markdown
Contributor

Clang-Tidy Check Results

Found 5788 issue(s); none are newly introduced by this patch.

All issues by check:

  • readability-identifier-naming: 2132
  • readability-redundant-member-init: 1361
  • portability-template-virtual-member-function: 575
  • performance-unnecessary-value-param: 532
  • readability-avoid-const-params-in-decls: 278
  • modernize-pass-by-value: 215
  • readability-braces-around-statements: 123
  • modernize-use-designated-initializers: 93
  • readability-convert-member-functions-to-static: 85
  • readability-const-return-type: 50
  • modernize-use-auto: 31
  • performance-move-const-arg: 29
  • performance-enum-size: 24
  • readability-qualified-auto: 23
  • readability-redundant-control-flow: 23
  • modernize-use-using: 19
  • modernize-use-equals-default: 17
  • modernize-concat-nested-namespaces: 17
  • readability-math-missing-parentheses: 16
  • readability-function-size: 15
  • modernize-avoid-c-arrays: 15
  • readability-static-definition-in-anonymous-namespace: 14
  • bugprone-branch-clone: 12
  • modernize-return-braced-init-list: 10
  • readability-isolate-declaration: 8
  • modernize-use-starts-ends-with: 8
  • readability-redundant-access-specifiers: 7
  • cppcoreguidelines-special-member-functions: 7
  • bugprone-throw-keyword-missing: 6
  • readability-inconsistent-declaration-parameter-name: 6
  • modernize-use-ranges: 6
  • readability-redundant-casting: 5
  • readability-container-contains: 5
  • readability-container-size-empty: 5
  • modernize-use-std-numbers: 3
  • modernize-use-integer-sign-comparison: 2
  • readability-use-anyofallof: 2
  • readability-else-after-return: 2
  • modernize-redundant-void-arg: 1
  • modernize-use-emplace: 1
  • readability-simplify-boolean-expr: 1
  • readability-redundant-string-init: 1
  • cppcoreguidelines-rvalue-reference-param-not-moved: 1
  • modernize-make-shared: 1
  • performance-avoid-endl: 1

See inline comments for details. Comment @phlexbot tidy-fix to auto-fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants