Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 50 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,33 @@
name: Test
name: Validation
on:
pull_request:
push:
branches: [master, develop]
workflow_dispatch:
types: [opened, reopened, synchronize, labeled]
Comment on lines 2 to +4

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail
rg -n 'types:.*unlabeled' .github/workflows/ci.yml

Repository: cpplint/cpplint

Length of output: 153


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail
printf '%s\n' '--- workflow ---'
cat -n .github/workflows/ci.yml
printf '%s\n' '--- label references ---'
rg -n -C 3 'skip-changelog|unlabeled|labeled|pull_request' .github/workflows README.md .github 2>/dev/null || true

Repository: cpplint/cpplint

Length of output: 7737


🌐 Web query:

GitHub Actions pull_request unlabeled activity type workflow trigger documentation

💡 Result:

To trigger a GitHub Actions workflow when a label is added to or removed from a pull request, you must use the pull_request event with the labeled or unlabeled activity types [1][2]. By default, a pull_request workflow only triggers on the opened, synchronize, and reopened activity types [1][3]. To include labeled or unlabeled activity, you must explicitly define these using the types keyword in your workflow configuration [1][2]. Example configuration: on: pull_request: types: - opened - synchronize - reopened - labeled - unlabeled When you use the types keyword, you must explicitly list all the activity types you want to trigger the workflow, including the default ones if you still want the workflow to run for those events [1][2]. Important Considerations: - If you specify multiple activity types, the workflow will trigger whenever any one of them occurs [4][5]. - You can access information about the event, such as which label was added or removed, using the GitHub Actions context, specifically github.event [6]. - Note that other activity types, such as labeled and unlabeled, do not automatically create workflow runs in an approval-required state (unlike opened, synchronize, and reopened which might trigger security checks if automated) [3][4]. For further details, consult the official GitHub documentation on events that trigger workflows [1][2] and workflow syntax [5].

Citations:


Handle label removal events.

Add unlabeled to the pull_request activity types. Without it, removing skip-changelog does not recompute the exemption, so a previous successful check can remain in effect.

Proposed trigger update
-    types: [opened, reopened, synchronize, labeled]
+    types: [opened, reopened, synchronize, labeled, unlabeled]
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
on:
pull_request:
push:
branches: [master, develop]
workflow_dispatch:
types: [opened, reopened, synchronize, labeled]
on:
pull_request:
types: [opened, reopened, synchronize, labeled, unlabeled]
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 2 - 4, Update the pull_request
activity types in the workflow trigger to include unlabeled alongside the
existing opened, reopened, synchronize, and labeled events, so removing
skip-changelog reruns the exemption check.

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
Comment on lines +1 to 7

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail
count=$(rg -c '^permissions:' .github/workflows/ci.yml || true)
test "$count" -eq 1
rg -n -A2 '^permissions:' .github/workflows/ci.yml

Repository: cpplint/cpplint

Length of output: 203


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf '%s\n' '--- workflow ---'
cat -n .github/workflows/ci.yml

printf '%s\n' '--- permissions and action usage ---'
rg -n -C2 'permissions:|dorny/paths-filter|actions/checkout|pull_request_target|pull_request:' .github/workflows .github/actions 2>/dev/null || true

printf '%s\n' '--- repository workflow files ---'
git ls-files '.github/workflows/*' '.github/actions/*'

Repository: cpplint/cpplint

Length of output: 5803


🌐 Web query:

dorny paths-filter v4 pull_request permissions contents read pull-requests read documentation

💡 Result:

When using the dorny/paths-filter action (version 4) in workflows triggered by pull_request or pull_request_target events, the action requires the pull-requests: read permission to use the GitHub REST API for detecting changes against the base branch [1][2][3]. In most common workflow configurations, you should include both pull-requests: read (for the action) and contents: read (typically required by actions/checkout) in your job's permissions block [1][4][5]: permissions: contents: read pull-requests: read If these permissions are not explicitly defined at the job or workflow level, the action may fail with a "Resource not accessible by integration" error because the default token permissions might be insufficient [4][6].

Citations:


Add explicit read-only token permissions.

This workflow runs tox on pull-request code and uses the checkout token. Add:

permissions:
  contents: read
  pull-requests: read

This also prevents dorny/paths-filter from failing when the repository default token permissions are insufficient.

🧰 Tools
🪛 zizmor (1.29.0)

[warning] 1-81: overly broad permissions (excessive-permissions): default permissions used due to no permissions: block

(excessive-permissions)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 1 - 7, Add a top-level permissions
block to the Validation workflow, granting contents and pull-requests read
access for checkout and dorny/paths-filter. Keep the existing pull_request
triggers and concurrency configuration unchanged.

Source: Linters/SAST tools

jobs:
choose-jobs:
runs-on: ubuntu-latest
steps:
- uses: dorny/paths-filter@v4
id: filter
with:
filters: |
nondoc:
- '!**/*.rst'
hasLog:
- added: 'changes/*'
py:
- '*.py'
outputs:
shouldTest: ${{ steps.filter.outputs.nondoc == 'true' }}
needsLog: ${{ steps.filter.outputs.py == 'true' }}
changelogged: ${{ steps.filter.outputs.hasLog == 'true' }}

build-test:
name: Continuous Integration
needs: choose-jobs
if: needs.choose-jobs.outputs.shouldTest
Comment on lines +23 to +30

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail
grep -Fq "if: needs.choose-jobs.outputs.shouldTest == 'true'" .github/workflows/ci.yml
grep -Fq "needs.choose-jobs.outputs.needsLog == 'true'" .github/workflows/ci.yml

Repository: cpplint/cpplint

Length of output: 153


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf '%s\n' '--- workflow excerpt ---'
cat -n .github/workflows/ci.yml | sed -n '1,100p'

printf '%s\n' '--- condition references ---'
rg -n -C 3 "shouldTest|needsLog|choose-jobs|build-test|pass:" .github/workflows/ci.yml

Repository: cpplint/cpplint

Length of output: 5737


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail
cat -n .github/workflows/ci.yml | sed -n '1,100p'

Repository: cpplint/cpplint

Length of output: 3650


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path
import re

text = Path(".github/workflows/ci.yml").read_text()

required = {
    "shouldTest output": r"shouldTest:\s*\$\{\{\s*steps\.filter\.outputs\.nondoc\s*==\s*'true'\s*\}\}",
    "needsLog output": r"needsLog:\s*\$\{\{\s*steps\.filter\.outputs\.py\s*==\s*'true'\s*\}\}",
    "build-test gate": r"if:\s*needs\.choose-jobs\.outputs\.shouldTest\b(?!\s*==)",
    "changelog gate": r"needs\.choose-jobs\.outputs\.needsLog\s*&&",
}

for name, pattern in required.items():
    print(f"{name}: {'present' if re.search(pattern, text) else 'absent'}")

# Job outputs are string-valued at the needs.*.outputs boundary.
for value in ("true", "false"):
    print(f"needs output {value!r}: {'runs' if bool(value) else 'skips'} under non-empty-string truthiness")
PY

Repository: cpplint/cpplint

Length of output: 375


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path
import re

text = Path(".github/workflows/ci.yml").read_text()

checks = {
    "shouldTest output": r"shouldTest:\s*\$\{\{\s*steps\.filter\.outputs\.nondoc\s*==\s*'true'\s*\}\}",
    "needsLog output": r"needsLog:\s*\$\{\{\s*steps\.filter\.outputs\.py\s*==\s*'true'\s*\}\}",
    "build-test direct gate": r"if:\s*needs\.choose-jobs\.outputs\.shouldTest\s*$",
    "changelog direct gate": r"needs\.choose-jobs\.outputs\.needsLog\s*&&",
}

for name, pattern in checks.items():
    print(f"{name}: {'present' if re.search(pattern, text, re.MULTILINE) else 'absent'}")

for value in ("true", "false"):
    print(f"{value!r} is non-empty: {bool(value)}")
PY

Repository: cpplint/cpplint

Length of output: 321


Compare both job outputs with 'true'.

Job outputs are strings, so 'false' is truthy in these conditions. Update both gates:

Proposed condition update
-    if: needs.choose-jobs.outputs.shouldTest
+    if: needs.choose-jobs.outputs.shouldTest == 'true'
...
-      needs.choose-jobs.outputs.needsLog &&
+      needs.choose-jobs.outputs.needsLog == 'true' &&
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 23 - 30, Update the choose-jobs output
gates in the build-test job and the other affected job condition to explicitly
compare their needs.choose-jobs.outputs values with 'true', rather than relying
on string truthiness; preserve the existing job-selection behavior for true and
false outputs.

runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
Expand All @@ -20,8 +39,6 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
Expand All @@ -34,3 +51,30 @@ jobs:
pip install --editable ".[dev]"
- name: Test with tox
run: tox -e py

changelog:
name: Changelog requirement
needs: choose-jobs
if: |
needs.choose-jobs.outputs.needsLog &&
!contains(github.event.pull_request.labels.*.name, 'skip-changelog') &&
!contains(github.event.pull_request.labels.*.name, 'dependencies') &&
github.event.pull_request.user.name != 'pre-commit-ci'

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail
! rg -nF 'github.event.pull_request.user.name' .github/workflows/ci.yml
rg -nF 'github.event.pull_request.user.login' .github/workflows/ci.yml

Repository: cpplint/cpplint

Length of output: 217


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf '%s\n' '--- workflow context ---'
sed -n '45,75p' .github/workflows/ci.yml

printf '%s\n' '--- pre-commit identity references ---'
rg -n -i 'pre-commit-ci|user\.(name|login)' .github README.md pyproject.toml setup.cfg 2>/dev/null || true

Repository: cpplint/cpplint

Length of output: 1444


🌐 Web query:

GitHub pre-commit.ci pull request author event pull_request user.login exact value

💡 Result:

The exact value for the pull request author (user login) associated with the pre-commit.ci bot is 'pre-commit-ci[bot]' [1][2][3]. When creating automated workflows in GitHub Actions to filter or identify pull requests created by pre-commit.ci, you can use this identifier within your conditional logic [1][2][3]. For example, to check the author of a pull request in a GitHub Actions workflow step, you would use: ${{ github.event.pull_request.user.login == 'pre-commit-ci[bot]' }} [1][2] This identifier is consistent with GitHub's naming convention for official integration bots [4]. Note that pre-commit.ci operates as an app, and its automated pull requests (such as autoupdates) will appear with this username [5][4].

Citations:


Use user.login and compare it with pre-commit-ci[bot].

pre-commit-ci is not the bot's exact login. The current condition can run the changelog check for pre-commit.ci pull requests.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml at line 62, Update the pull request author
condition in the CI workflow to use github.event.pull_request.user.login and
compare it against the exact bot login pre-commit-ci[bot], preventing changelog
checks from running for pre-commit.ci pull requests.

# impossible to make pre-commit-ci add label "at least not for free tier"
runs-on: ubuntu-latest
steps:
- run: |
exit $([[ ${{ needs.choose-jobs.outputs.changelogged }} == 'true' ]])

pass:
name: Summary
needs: [ build-test, changelog ]
if: always()
runs-on: ubuntu-latest
steps:
- name: Fail if changelog ran and failed
if: ${{ needs.changelog.result == 'failure' }}
run: echo "Please follow instructions under https://github.com/cpplint/cpplint/blob/crytown/CONTRIBUTING.rst#pull-requests to add a changelog entry\nor request the `skip-changelog` label if you believe the changes should not be in the changelog." >> $GITHUB_STEP_SUMMARY; exit 1
- name: Fail if build-test ran and failed
if: ${{ needs.build-test.result == 'failure' }}
run: echo "Failed required test(s).\nSee https://github.com/cpplint/cpplint/blob/develop/CONTRIBUTING.rst#testing for help on testing." >> $GITHUB_STEP_SUMMARY; exit 1
Comment on lines +69 to +80

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail
grep -Fq 'needs: [ choose-jobs, build-test, changelog ]' .github/workflows/ci.yml
grep -Fq 'needs.choose-jobs.result' .github/workflows/ci.yml

Repository: cpplint/cpplint

Length of output: 153


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf '%s\n' '--- workflow structure ---'
nl -ba .github/workflows/ci.yml | sed -n '1,120p'

printf '%s\n' '--- job identifiers and dependencies ---'
rg -n '^[[:space:]]{2}[A-Za-z0-9_-]+:|^[[:space:]]{4}(needs|if|runs-on):|needs\.[A-Za-z0-9_-]+\.result' .github/workflows/ci.yml

Repository: cpplint/cpplint

Length of output: 220


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path
import re

text = Path(".github/workflows/ci.yml").read_text()
jobs = re.search(r"(?ms)^jobs:\n(.*?)(?=^ [A-Za-z]|\Z)", text)
print("jobs section found:", bool(jobs))
for name in ("choose-jobs", "build-test", "changelog", "pass"):
    m = re.search(rf"(?ms)^  {re.escape(name)}:\n(.*?)(?=^  [A-Za-z0-9_-]+:|\Z)", text)
    print(f"\n[{name}]")
    print(m.group(0) if m else "missing")
PY

Repository: cpplint/cpplint

Length of output: 2948


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path
import re

text = Path(".github/workflows/ci.yml").read_text()
for name in ("choose-jobs", "build-test", "changelog", "pass"):
    start = re.search(rf"(?m)^  {re.escape(name)}:", text)
    if not start:
        print(f"{name}: missing")
        continue
    end = re.search(r"(?m)^  [A-Za-z0-9_-]+:", text[start.end():])
    block = text[start.start(): start.end() + (end.start() if end else len(text))]
    print(f"\n--- {name} ---")
    print(block)
PY

Repository: cpplint/cpplint

Length of output: 2947


Make the summary fail when job selection fails.

pass does not depend directly on choose-jobs. If choose-jobs fails, its dependent jobs can be skipped, while always() still runs pass. The current failure checks do not detect this state. Add choose-jobs to needs and fail when its result is not success. Also fail for cancelled required jobs while preserving intentional skips.

🧰 Tools
🪛 zizmor (1.29.0)

[warning] 69-81: overly broad permissions (excessive-permissions): default permissions used due to no permissions: block

(excessive-permissions)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 69 - 80, Update the pass job’s needs
list to include choose-jobs, and add a summary failure check for choose-jobs,
build-test, and changelog results that fails on failure or cancellation but
preserves intentional skips. Ensure the existing success path remains unchanged
when all required jobs complete successfully.

Comment on lines +75 to +80

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail
if rg -n 'echo .*`skip-changelog`' .github/workflows/ci.yml; then
  exit 1
fi
rg -n 'printf|GITHUB_STEP_SUMMARY' .github/workflows/ci.yml

Repository: cpplint/cpplint

Length of output: 443


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf '%s\n' '--- workflow context ---'
cat -n .github/workflows/ci.yml | sed -n '68,83p'

printf '%s\n' '--- documentation references ---'
rg -n 'CONTRIBUTING\.rst#(pull-requests|testing)|crytown|develop' .github README.md CONTRIBUTING.rst 2>/dev/null || true

printf '%s\n' '--- isolated Bash behavior ---'
tmp="$(mktemp)"
trap 'rm -f "$tmp"' EXIT
bash -c 'echo "Please follow instructions\nor request the `skip-changelog` label." >> "$1"' bash "$tmp" 2>"$tmp.stderr" || true
printf '%s\n' 'output bytes:'
od -An -t x1c "$tmp"
printf '%s\n' 'stderr:'
cat "$tmp.stderr"
printf '%s\n' 'printf output bytes:'
bash -c 'printf "%s\n" "Please follow instructions" "Or request the \`skip-changelog\` label."' bash | od -An -t x1c

Repository: cpplint/cpplint

Length of output: 2071


🏁 Script executed:

#!/usr/bin/env bash
set -u

out="$(mktemp)"
err="$(mktemp)"
trap 'rm -f "$out" "$err"' EXIT

bash -c 'echo "Please follow instructions\nor request the `skip-changelog` label."' bash \
  >"$out" 2>"$err" || printf 'shell status: %s\n' "$?"

python3 - "$out" "$err" <<'PY'
import pathlib
import sys

for label, path in (("stdout", sys.argv[1]), ("stderr", sys.argv[2])):
    data = pathlib.Path(path).read_bytes()
    print(f"{label} bytes: {data!r}")
PY

printf '%s\n' '--- URL status ---'
for url in \
  'https://github.com/cpplint/cpplint/blob/crytown/CONTRIBUTING.rst#pull-requests' \
  'https://github.com/cpplint/cpplint/blob/develop/CONTRIBUTING.rst#pull-requests' \
  'https://github.com/cpplint/cpplint/blob/develop/CONTRIBUTING.rst#testing'
do
  curl -L -sS -o /dev/null -w '%{http_code} %{url_effective}\n' "$url" || true
done

Repository: cpplint/cpplint

Length of output: 553


Write literal Markdown with printf.

The backticks execute skip-changelog, which produces a command-not-found error and removes the label text. The \n sequence does not produce a newline. Replace echo with quoted printf arguments and use the develop link; the crytown link returns 404.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml around lines 75 - 80, Update the “Fail if changelog
ran and failed” and “Fail if build-test ran and failed” steps to use quoted
printf arguments so Markdown backticks remain literal and newline escapes
produce actual line breaks. Change the changelog CONTRIBUTING link from the
crytown branch to develop, while preserving the existing failure messages and
exit behavior.

34 changes: 17 additions & 17 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ TBA
Yet another overdue... hotfix. Sorry this took so long.

* The false positive for indented function parameters in namespaces was eradicated. (https://github.com/cpplint/cpplint/pull/304)
* Files that end in ".c", ".C", or ".cu" will now also automatically suppress C++-only categories. Previously, `// NO_LINT_C` was required. (https://github.com/cpplint/cpplint/pull/318)
* Files that end in ".c", ".C", or ".cu" will now also automatically suppress C++-only categories. Previously, ``// NO_LINT_C`` was required. (https://github.com/cpplint/cpplint/pull/318)
* build/include-what-you-use now recognizes c-style headers such as <stdio.h> for symbols from <cstdio>. (https://github.com/cpplint/cpplint/pull/319)
* Ruff, mypy, and codespell were ran on the project to improve performance and reader comprehension thanks to @cclauss.
* Tests were refactored away from unittest to improve display with pytest by @cclauss. (https://github.com/cpplint/cpplint/pull/332)
Expand All @@ -35,8 +35,8 @@ A large long-overdue modernization of the codebase!
* Python versions less than 3.8 are no longer supported. Python 3.12 support was added along with fixed CI for 3.7 and 3.8, courtesy of @jayvdb
* As a result of all this, setup.py's lint subcommand was removed. Please run the commands directly instead.
* You can now specify blocks of code that exclude linting with NOLINTBEGIN and NOLINTEND, courtesy of @n3world (https://github.com/cpplint/cpplint/pull/213)
* The config filename can now be specified through `--config` thanks to @gedankenexperimenter (https://github.com/cpplint/cpplint/pull/198). Specifying a config file not under the current directory will be available in a future release.
* The `--filter` option can now be only applied to a specific file or even a specific line through utilizing colons, e.g. `-filter=-whitespace:foo.h,+whitespace/braces:foo.h:418`. Courtesy of @PhilLab (https://github.com/cpplint/cpplint/pull/171)
* The config filename can now be specified through ``--config`` thanks to @gedankenexperimenter (https://github.com/cpplint/cpplint/pull/198). Specifying a config file not under the current directory will be available in a future release.
* The ``--filter`` option can now be only applied to a specific file or even a specific line through utilizing colons, e.g. ``-filter=-whitespace:foo.h,+whitespace/braces:foo.h:418``. Courtesy of @PhilLab (https://github.com/cpplint/cpplint/pull/171)
* NOLINT and NOLINTNEXTLINE comments now support a comma-separated list of categories, courtesy of @n3world (https://github.com/cpplint/cpplint/pull/220)
* NOLINT and NOLINTNEXTLINE will now ignore categories known to be from clang-tidy thanks to @xatier (https://github.com/cpplint/cpplint/pull/231)
* Fixed behavior with nested source repositories by @groegeorg (https://github.com/cpplint/cpplint/pull/78)
Expand All @@ -45,8 +45,8 @@ A large long-overdue modernization of the codebase!
* build/include-what-you-use will no longer err on similarly-named classes from other namespaces thanks to @geoffviola (https://github.com/cpplint/cpplint/pull/273)
* Indented functions inside namespaces will now be correctly erred on, courtesy of @Yujinmon (https://github.com/cpplint/cpplint/pull/235)
* The check for C-style casts now looks for the standard fixed-width integer typenames instead of non-standard ones (e.g. int32_t instead of int32) thanks to @nate-thirdwave (https://github.com/cpplint/cpplint/pull/282)
* `[[(un)likely]]` no longer clouds readability/braces's super spy−scanning of braces, courtesy of @aaronliu0130 (https://github.com/cpplint/cpplint/pull/265)
* `readability/braces` will realize that C++20 concepts require a semicolon, courtesy of @armandas (https://github.com/cpplint/cpplint/pull/288)
* ``[[(un)likely]]`` no longer clouds readability/braces's super spy−scanning of braces, courtesy of @aaronliu0130 (https://github.com/cpplint/cpplint/pull/265)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Finish the RST inline-literal conversion.

Line 48 leaves readability/braces as plain text, and Line 60 leaves __VA_OPT__(,) as plain text. Wrap both identifiers in double backticks to follow the formatting rule documented in CONTRIBUTING.rst, Line 68.

Proposed markup update
-* ``[[(un)likely]]`` no longer clouds readability/braces's super spy−scanning of braces, courtesy of `@aaronliu0130` (https://github.com/cpplint/cpplint/pull/265)
+* ``[[(un)likely]]`` no longer clouds ``readability/braces``'s super spy−scanning of braces, courtesy of `@aaronliu0130` (https://github.com/cpplint/cpplint/pull/265)
...
-* The new __VA_OPT__(,) will now be recognized by the Whitespace linter as a function thanks to `@elrinor` (https://github.com/cpplint/cpplint/pull/237)
+* The new ``__VA_OPT__(,)`` will now be recognized by the Whitespace linter as a function thanks to `@elrinor` (https://github.com/cpplint/cpplint/pull/237)

Also applies to: 60-60

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CHANGELOG.rst` at line 48, Update the changelog entries so the identifiers
readability/braces and __VA_OPT__(,) are wrapped in double-backtick RST
inline-literal markup, matching the formatting used for other code-like names.

* ``readability/braces`` will realize that C++20 concepts require a semicolon, courtesy of @armandas (https://github.com/cpplint/cpplint/pull/288)
* C++20 headers will no longer be flagged as C headers thanks to @miker2 (https://github.com/cpplint/cpplint/pull/216)
* Same goes for C++23 and C23 headers, thanks to @aaronliu0130 (https://github.com/cpplint/cpplint/pull/239)
* "complex.h" will be treated as the C99 header instead of the legacy C++ header by @tkruse (https://github.com/cpplint/cpplint/pull/219)
Expand All @@ -56,10 +56,10 @@ A large long-overdue modernization of the codebase!
* We will no longer bother you if you mark a no-arg constructor as explicit thanks to @markww (https://github.com/cpplint/cpplint/pull/227)
* In the same PR, @aaronliu0130 also decreased the verbosity of nagging to mark single-arg constructors as explicit to 4, as the styleguide includes a major exception to this rule that would be very hard to detect.
* Processing C++ files through stdin/piping is now fixed thanks to @aaronliu0130 (https://github.com/cpplint/cpplint/pull/289)
* You can now specify the name of the CPPLINT.cfg file through `--config` as long as it is in the same directory, thanks to @gedankenexperimenter (https://github.com/cpplint/cpplint/pull/198)
* You can now specify the name of the CPPLINT.cfg file through ``--config`` as long as it is in the same directory, thanks to @gedankenexperimenter (https://github.com/cpplint/cpplint/pull/198)
* The new __VA_OPT__(,) will now be recognized by the Whitespace linter as a function thanks to @elrinor (https://github.com/cpplint/cpplint/pull/237)
* The check for including a source file's header file will now scan all files with the same base name. Thanks to @crogre for figuring out what code needed to be changed and @aaronliu0130 for fixing it (https://github.com/cpplint/cpplint/pull/104)
* `build/class` and `build/namespaces` no longer check for whether a namespace or class has a closing brace from @geoffviola (https://github.com/cpplint/cpplint/pull/272). This should be done in a more efficient manner by a compiler or language server instead. As part of this, the `build/class` category was removed.
* ``build/class`` and ``build/namespaces`` no longer check for whether a namespace or class has a closing brace from @geoffviola (https://github.com/cpplint/cpplint/pull/272). This should be done in a more efficient manner by a compiler or language server instead. As part of this, the ``build/class`` category was removed.
* Fixed false positive when an if/else statement has braces everywhere but one of the closing braces before the final block is on a separate line by @aaronliu0130 (https://github.com/cpplint/cpplint/pull/265)
* For header files, the check for a header guard's name will now be cached and only run once, as opposed to previously being run on every line. This results in a ~5.6% reduction in run time thanks to @matyalatte, who figured it out, and @aaronliu0130 for implementing it (https://github.com/cpplint/cpplint/pull/291)
* Usages of the deprecated sre_compile were refactored by @jspricke (https://github.com/cpplint/cpplint/pull/214)
Expand Down Expand Up @@ -113,7 +113,7 @@ A large long-overdue modernization of the codebase!
1.5.1 (2020-06-05)
==================

* Revert #43 behavior change for include order from 1.5.0, and hide it behind command-line-flag `--includeorder=standardcfirst`.
* Revert #43 behavior change for include order from 1.5.0, and hide it behind command-line-flag ``--includeorder=standardcfirst``.
It turns out there is no easy objective way to tell c system headers from certain c++ library headers, and Google cpplint intentionally classifies some C++ header includes as C system header for simplicity.
* Libraries considered as C system headers using --includeorder=standardcfirst now also includes linux-specific headers (glibc-devel, glibc-kernheaders, linux-libc-dev).

Expand All @@ -133,8 +133,8 @@ A large long-overdue modernization of the codebase!
1.4.5 (2020-01-13)
==================

* Avoid false positive for [build/include_what_you_use] in case of `foo.set<type>` and `foo->set<type>` usage.
* Avoid false positive for [build/include_what_you_use] in case of `map` is user defined function
* Avoid false positive for [build/include_what_you_use] in case of ``foo.set<type>`` and ``foo->set<type>`` usage.
* Avoid false positive for [build/include_what_you_use] in case of ``map`` is user defined function
* Escape backslashes in pydoc strings to get rid of DeprecationWarning.
* Fix false positive "should include its header" for 3rd party headers
* Add support for c++17 tuple destructuring
Expand All @@ -149,12 +149,12 @@ Another cleanup release

* NOBUG: fix unit/cli tests for source release
* NOBUG: reduce diff to upstream by intentionally using deprecated functions where upstream uses them
* add `--version` command (https://github.com/cpplint/cpplint/issues/27)
* add ``--version`` command (https://github.com/cpplint/cpplint/issues/27)

1.4.3 (2019-02-18)
==================

* Revert "Fix the `build/endif_comment` check", same as reverted in upstream
* Revert "Fix the ``build/endif_comment`` check", same as reverted in upstream

1.4.2 (2019-02-17)
==================
Expand All @@ -170,12 +170,12 @@ Another cleanup release
==================

* Incorporate cpplint updates from google (e5d807c6a0d, 2018-05-03)
* Fix the `build/endif_comment` check (https://github.com/google/styleguide/pull/169)
* Fix the ``build/endif_comment`` check (https://github.com/google/styleguide/pull/169)
* Teach the explicit constructor check about constexpr (#56)
* Changed vs7 output format (#57)
* Remove presubmit check for DISALLOW_* macros (#54)
* add `--quiet` flag as in upstream (https://github.com/google/styleguide/pull/293)
* support `--root` argument to run in different folder (https://github.com/google/styleguide/pull/291)
* add ``--quiet`` flag as in upstream (https://github.com/google/styleguide/pull/293)
* support ``--root`` argument to run in different folder (https://github.com/google/styleguide/pull/291)
* Fix 16bit Unicode issue (https://github.com/google/styleguide/issues/337)

1.3.0 (2016-07-12)
Expand All @@ -198,8 +198,8 @@ Another cleanup release
1.2.0 (2016-03-19)
==================

* Adds `.cu` and `.cuh` as supported file extensions by default.
* Moves the warning "Include the directory when naming .h files" from the `build/include` category to the `build/include_subdir` category.
* Adds ``.cu`` and ``.cuh`` as supported file extensions by default.
* Moves the warning "Include the directory when naming .h files" from the ``build/include`` category to the ``build/include_subdir`` category.

1.1.0 (2016-02-24)
==================
Expand Down
Loading