feat: use cucumber/tag-expressions - #385
Conversation
✅
|
| Descriptor | Linter | Files | Fixed | Errors | Max errors | Warnings | Elapsed time |
|---|---|---|---|---|---|---|---|
| ✅ ACTION | actionlint | 6 | 0 | 0 | 0.06s | ||
| ✅ ACTION | zizmor | 6 | 0 | 0 | 0 | 3.94s | |
| ✅ CPP | clang-format | 253 | 1 | 0 | 0 | 1.62s | |
| ✅ DOCKERFILE | hadolint | 1 | 0 | 0 | 0.03s | ||
| markdownlint | 8 | 5 | 20 | 0 | 1.32s | ||
| ✅ MARKDOWN | markdown-table-formatter | 8 | 5 | 0 | 0 | 0.29s | |
| ✅ REPOSITORY | betterleaks | yes | no | no | 1.11s | ||
| ✅ REPOSITORY | git_diff | yes | no | no | 0.03s | ||
| ✅ REPOSITORY | grype | yes | no | no | 62.87s | ||
| ✅ REPOSITORY | ls-lint | yes | no | no | 0.01s | ||
| ✅ REPOSITORY | secretlint | yes | no | no | 6.33s | ||
| ✅ REPOSITORY | syft | yes | no | no | 2.33s | ||
| ✅ REPOSITORY | trivy | yes | no | no | 11.47s | ||
| ✅ REPOSITORY | trivy-sbom | yes | no | no | 0.75s | ||
| ✅ REPOSITORY | trufflehog | yes | no | no | 3.77s | ||
| lychee | 73 | 1 | 0 | 11.72s | |||
| ✅ YAML | prettier | 13 | 1 | 0 | 0 | 0.69s | |
| ✅ YAML | v8r | 13 | 0 | 0 | 5.33s | ||
| ✅ YAML | yamllint | 13 | 0 | 0 | 0.77s |
Detailed Issues
⚠️ SPELL / lychee - 1 error
📝 Summary
---------------------
🔍 Total..........168
🔗 Unique.........162
✅ Successful.....167
⏳ Timeouts.........0
🔀 Redirected......74
👻 Excluded.........0
❓ Unknown..........0
🚫 Errors...........1
⛔ Unsupported......1
Errors in CONTRIBUTING.md
[404] https://github.com/yourname/amp-cucumber-cpp-runner.git (at 41:35) | Rejected status code: 404 Not Found | Followed 1 redirect. Redirects: https://github.com/yourname/amp-cucumber-cpp-runner.git --[301]--> https://github.com/yourname/amp-cucumber-cpp-runner
Hint: Followed 74 redirects. You might want to consider replacing redirecting URLs with the resolved URLs. Use verbose mode (`-v`/`-vv`) to see redirection details.
Hint: You can configure accepted/rejected response codes with `-a` or `--accept`
⚠️ MARKDOWN / markdownlint - 20 errors
CHANGELOG.md:31 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Features"]
CHANGELOG.md:38 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Bug Fixes"]
CHANGELOG.md:44 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Chores"]
CHANGELOG.md:51 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Features"]
CHANGELOG.md:58 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Chores"]
CHANGELOG.md:66 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "⚠ BREAKING CHANGES"]
CHANGELOG.md:70 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Features"]
CHANGELOG.md:79 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Features"]
CHANGELOG.md:85 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Chores"]
CHANGELOG.md:93 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "⚠ BREAKING CHANGES"]
CHANGELOG.md:97 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Features"]
CHANGELOG.md:102 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Bug Fixes"]
CHANGELOG.md:111 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Features"]
CHANGELOG.md:122 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Chores"]
CHANGELOG.md:130 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "⚠ BREAKING CHANGES"]
CHANGELOG.md:134 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Features"]
CHANGELOG.md:159 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Bug Fixes"]
CHANGELOG.md:166 error MD024/no-duplicate-heading Multiple headings with the same content [Context: "Chores"]
cmake/WindowsToolchainFilesProvidedBy.md:1 error MD041/first-line-heading/first-line-h1 First line in a file should be a top-level heading [Context: "<https://github.com/MarkSchofi..."]
README.md:132 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
Notices
REPOSITORY_GITLEAKS, REPOSITORY_GOODCHECK, REPOSITORY_KICS. See Removed linters to find their replacements.
See detailed reports in MegaLinter artifacts
Your project could benefit from a custom flavor, which would allow you to run only the linters you need, and thus improve runtime performances. (Skip this info by defining FLAVOR_SUGGESTIONS: false)
- Documentation: Custom Flavors
- Command:
npx mega-linter-runner@10.0.0 --custom-flavor-setup --custom-flavor-linters ACTION_ACTIONLINT,ACTION_ZIZMOR,CPP_CLANG_FORMAT,DOCKERFILE_HADOLINT,MARKDOWN_MARKDOWNLINT,MARKDOWN_MARKDOWN_TABLE_FORMATTER,REPOSITORY_GIT_DIFF,REPOSITORY_BETTERLEAKS,REPOSITORY_GRYPE,REPOSITORY_LS_LINT,REPOSITORY_SECRETLINT,REPOSITORY_SYFT,REPOSITORY_TRIVY,REPOSITORY_TRIVY_SBOM,REPOSITORY_TRUFFLEHOG,SPELL_LYCHEE,YAML_PRETTIER,YAML_YAMLLINT,YAML_V8R

Show us your support by starring ⭐ the repository
There was a problem hiding this comment.
Pull request overview
This PR migrates the runner from the in-repo cucumber_cpp::library::tag_expression implementation to the upstream C++ tag expressions library from github.com/cucumber/tag-expressions, updating both code and build wiring accordingly.
Changes:
- Removes the in-repo tag expression implementation (parser/model/token/error) and its associated unit tests/CMake targets.
- Updates runtime call sites to use
cucumber::tag_expressions::{Model,Parse}and links againstcucumber::tag_expressions. - Adds
cucumber/tag-expressionsas a CPM dependency.
Reviewed changes
Copilot reviewed 20 out of 21 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| cucumber_cpp/library/tag_expression/Token.hpp | Removes in-repo token definitions (now provided by external library). |
| cucumber_cpp/library/tag_expression/Token.cpp | Removes in-repo token behavior implementation. |
| cucumber_cpp/library/tag_expression/Parser.hpp | Removes in-repo parser public API declaration. |
| cucumber_cpp/library/tag_expression/Parser.cpp | Removes in-repo parser implementation. |
| cucumber_cpp/library/tag_expression/Model.hpp | Removes in-repo expression model public API. |
| cucumber_cpp/library/tag_expression/Model.cpp | Removes in-repo expression model implementation. |
| cucumber_cpp/library/tag_expression/Error.hpp | Removes in-repo error type. |
| cucumber_cpp/library/tag_expression/Error.cpp | Removes in-repo error implementation unit. |
| cucumber_cpp/library/tag_expression/CMakeLists.txt | Removes CMake target for the in-repo tag expression library. |
| cucumber_cpp/library/tag_expression/test/TestToken.cpp | Removes unit tests for token precedence. |
| cucumber_cpp/library/tag_expression/test/TestParsing.cpp | Removes YAML-driven parsing tests for the in-repo parser. |
| cucumber_cpp/library/tag_expression/test/TestEvaluations.cpp | Removes YAML-driven evaluation tests for the in-repo evaluator. |
| cucumber_cpp/library/tag_expression/test/TestErrors.cpp | Removes parser error expectation tests. |
| cucumber_cpp/library/tag_expression/test/CMakeLists.txt | Removes test target wiring for the deleted tag_expression tests. |
| cucumber_cpp/library/support/Types.hpp | Switches stored tag-expression types to cucumber::tag_expressions::Expression. |
| cucumber_cpp/library/support/HookRegistry.hpp | Updates hook tag-expression ownership type to upstream library model. |
| cucumber_cpp/library/support/HookRegistry.cpp | Switches hook expression parsing to cucumber::tag_expressions::Parse. |
| cucumber_cpp/library/support/CMakeLists.txt | Links support library against cucumber::tag_expressions instead of the removed local target. |
| cucumber_cpp/library/CMakeLists.txt | Links the main library against cucumber::tag_expressions and disables the local tag_expression subdir. |
| cucumber_cpp/library/Application.cpp | Switches CLI tag parsing to cucumber::tag_expressions::Parse. |
| cmake/dependencies.cpm.cmake | Adds CPM fetch for cucumber/tag-expressions and defines its pin metadata. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 20 out of 21 changed files in this pull request and generated no new comments.
Suppressed comments (2)
Previously missed (1) — in code that hasn't changed since the last review.
cucumber_cpp/library/Application.cpp:250
--tags/--retry-tag-filterparsing now depends oncucumber::tag_expressions::Parse, but the currentcucumber_cpp/library/test/TestApplication.cppsuite doesn’t exercise tag filtering. Adding an integration test with a tagged.featurewould help catch behavior differences/regressions from the library swap.
.tagExpression = cucumber::tag_expressions::Parse(fmt::to_string(fmt::join(options.tags, " "))),
cmake/dependencies.cpm.cmake:18
- Renovate metadata for this dependency points to the wrong upstream repo (currently
packageName=cucumber/gherkin). This will prevent automated updates (or update the wrong dependency).
# renovate: datasource=github-tags packageName=cucumber/gherkin versioning=semver
…sn and add both to find_package
|
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 20 out of 21 changed files in this pull request and generated no new comments.
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
cmake/dependencies.cpm.cmake:19
- CUCUMBER_TAG_EXPRESSIONS is pinned to TAG v1.0.0, but that upstream tag doesn’t include the C++
cpp/subtree (the repo only had README/java/javascript/ruby at that tag). Since this project fetchesSOURCE_SUBDIR cpp, keeping TAG at v1.0.0 makes the version metadata misleading and is likely to break if the digest pin is ever removed/updated by Renovate. Pin to a tag that actually contains the C++ implementation (e.g. v11.0.1) and use the matching digest for that tag.
# renovate: datasource=github-tags packageName=cucumber/tag-expressions versioning=semver
ccr_dependency(CUCUMBER_TAG_EXPRESSIONS v1.0.0 2d2e9ac1d84a2e05154fa982a276a04e3d1b3650)



cucumber_cpp/library/tag_expression has been moved to github.com/cucumber/tag-expressions