Skip to content

feat: handle line-number anchors and issue comments globally#56

Merged
zeitlinger merged 1 commit intomainfrom
global-github-url-handling
Feb 23, 2026
Merged

feat: handle line-number anchors and issue comments globally#56
zeitlinger merged 1 commit intomainfrom
global-github-url-handling

Conversation

@zeitlinger
Copy link
Copy Markdown
Member

Summary

  • Strip line-number anchors (#L123, #L10-L20) from ALL GitHub /blob/ URLs (any repo), so the file is still checked but the JS-rendered fragment is skipped
  • Exclude issue comment anchors (#issuecomment-*) globally — these are JS-rendered and cannot be verified by lychee
  • Remove the global lychee#1729 remap workaround from flint's own lychee.toml (now handled by the script)
  • Add test cases for both patterns

This means consuming repos no longer need to add these exclusions to their lychee.toml configs. Discovered while adopting flint in opentelemetry-java-instrumentation#16270.

Test plan

  • CI link check passes (exercises the new test links in tests/test-links.md)
  • External repo line-number anchor test (okhttp build.gradle#L144-L153) passes
  • Issue comment anchor test passes

Add global GitHub URL handling that applies to ALL repositories,
not just the current one:

- Line-number anchors (#L123, #L10-L20) on any GitHub /blob/ URL
  are stripped so the file is still checked but the JS-rendered
  fragment is skipped
- Issue comment anchors (#issuecomment-*) are excluded entirely
  as they are JS-rendered

This means consuming repos no longer need to add these exclusions
to their lychee.toml configs.
Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
Copilot AI review requested due to automatic review settings February 23, 2026 09:58
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR enhances the link checking script to handle GitHub-specific URL patterns globally, eliminating the need for consuming repositories to configure these exclusions in their own lychee.toml files. The changes centralize handling of line-number anchors and issue comment anchors for any GitHub repository.

Changes:

  • Added global remap rule to strip line-number anchors (#L123, #L10-L20) from all GitHub /blob/ URLs
  • Added global exclusion for issue comment anchors (#issuecomment-*)
  • Removed the workaround remap from flint's own lychee.toml (now handled by script)

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated no comments.

File Description
tasks/lint/links.sh Added build_global_github_args() function to generate global remap and exclude rules for GitHub URLs
tests/test-links.md Added test cases for external repository line-number anchors and issue comment anchors
README.md Documented the new global GitHub URL handling behavior
.github/config/lychee.toml Removed the static remap rule (now handled dynamically by the script)

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@zeitlinger zeitlinger merged commit cf751df into main Feb 23, 2026
13 checks passed
@zeitlinger zeitlinger deleted the global-github-url-handling branch February 23, 2026 10:27
zeitlinger added a commit that referenced this pull request Feb 23, 2026
## Summary

Fixes the lint failure in #41 (release-please PR).

CLI `--exclude` overrides (rather than merges with) config file excludes
in lychee. The `--exclude` added in #56 for `#issuecomment-` URLs caused
the config file's `exclude` patterns (like the `compare/` URL exclusion)
to be ignored.

Fix: switch to `--remap` which strips the `#issuecomment-` fragment
while still checking the issue/PR page itself.

## Test plan
- [ ] CI passes (the release-please PR #41 should also pass after this
merges)

Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
zeitlinger pushed a commit that referenced this pull request Feb 23, 2026
🤖 I have created a release *beep* *boop*
---


## [0.7.0](v0.6.0...v0.7.0)
(2026-02-23)


### Features

* handle line-number anchors and issue comments globally
([#56](#56))
([cf751df](cf751df))


### Bug Fixes

* **release-please:** fix footer not appearing on release PRs
([#40](#40))
([d7a55e4](d7a55e4))
* use remap instead of exclude for issue comment anchors
([#58](#58))
([656f355](656f355))

---
> [!IMPORTANT]
> Close and reopen this PR to trigger CI checks.

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
zeitlinger pushed a commit that referenced this pull request Apr 13, 2026
## flint v0.20.0 — Rust rewrite

flint has been rewritten from scratch in Rust. The bash + Docker stack
is replaced by a fast, cross-platform native binary with no container
dependency.

### Highlights

- **Native binary** — no Docker, no bash wrappers; runs anywhere mise
can install a Rust crate
- **Parallel linting** — all checks run concurrently
- **Diff-aware** — only checks files changed since the merge base by
default (`--full` for everything)
- **`flint update`** — migrates obsolete `mise.toml` tool keys
automatically (e.g. `ubi:` → `github:`, `npm:markdownlint-cli` →
`npm:markdownlint-cli2`)
- **`flint hook install`** — installs a pre-commit hook without any mise
task knowledge
- **New linters**: `gofmt`, `google-java-format`, `ktlint`,
`dotnet-format`, `markdownlint-cli2`, `xmllint` (via `cargo:xmloxide`),
`license-header` (pure-Rust, no binary)
- **Windows support** — ktlint self-executing JAR handled via explicit
`java -jar` invocation

### Migration

See
[AGENTS-V2.md](https://github.com/grafana/flint/blob/main/AGENTS-V2.md)
and [README.md](https://github.com/grafana/flint/blob/main/README.md)
for full setup instructions.

Quick reference for existing consumers:

```toml
[tools]
# While installing from source (pre-crates.io release):
"cargo:https://github.com/grafana/flint" = "branch:main"

[env]
FLINT_CONFIG_DIR = ".github/config"

[tasks.lint]
run = "flint run"

[tasks."lint:fix"]
run = "flint run --fix"
```

Remove: `lint:super-linter`, `lint:links`, `lint:renovate-deps`,
`setup:native-lint-tools`, `setup:pre-commit-hook` tasks. Run `flint
update` to auto-migrate any obsolete tool keys.

> [!NOTE]
> The changelog below includes entries from the legacy v1 bash era — see
[README-V1.md](https://github.com/grafana/flint/blob/main/README-V1.md)
for v1 docs.

---

##
[0.20.0](flint-v0.19.0...flint-v0.20.0)
(2026-04-13)


### Features

* add flint v2 Rust binary
([#139](#139))
([19f2b25](19f2b25))
* add native linting mode and version mapping infrastructure
([#93](#93))
([24b06da](24b06da))
* add Renovate shareable preset for consuming repos
([#17](#17))
([8a06590](8a06590))
* consolidate link checking and add autofix flags
([#7](#7))
([086a5e9](086a5e9))
* flint update command, explicit JAR flag, v0.20.0
([#146](#146))
([b43bf52](b43bf52))
* handle line-number anchors and issue comments globally
([#56](#56))
([cf751df](cf751df))
* **links:** add GitHub URL remaps for line-number and fragment anchors
([#28](#28))
([5b59065](5b59065))
* **links:** auto-remap base-branch GitHub URLs to PR branch
([#18](#18))
([dd6cc61](dd6cc61))
* **renovate:** support SHA-pinned URLs in Renovate preset
([#21](#21))
([4fd1f28](4fd1f28))
* **super-linter:** default to slim image
([#24](#24))
([c8eeab8](c8eeab8))
* support NATIVE env var for container-free linting
([#107](#107))
([0a8193d](0a8193d))


### Bug Fixes

* activate mise environment in native lint mode
([#123](#123))
([d0fec45](d0fec45))
* add 'mise run fix' hint to lint failure output
([#90](#90))
([5b4ad5d](5b4ad5d))
* decouple version mapping generation from pinned super-linter version
([#112](#112))
([5370e77](5370e77))
* **deps:** update rust crate crossterm to 0.29
([#156](#156))
([c59ae3e](c59ae3e))
* **deps:** update rust crate similar to v3
([#160](#160))
([684be4e](684be4e))
* **deps:** update rust crate toml to v1
([#161](#161))
([3aae614](3aae614))
* **deps:** update rust crate toml_edit to 0.25
([#158](#158))
([42d9efd](42d9efd))
* exclude GitHub compare links from lychee checks
([#10](#10))
([e714608](e714608))
* fail native lint when enabled tools are missing
([#111](#111))
([163bb6b](163bb6b))
* improve link checker reliability against GitHub rate limiting
([#95](#95))
([7a5282d](7a5282d))
* include staged files in native lint file list
([#135](#135))
([34412d6](34412d6))
* **links:** add regex anchors to remap patterns
([#19](#19))
([2e17348](2e17348))
* native lint in worktrees, trust toml, use ec binary, drop isort
([#134](#134))
([8594bba](8594bba))
* **release-please:** fix footer not appearing on release PRs
([#40](#40))
([d7a55e4](d7a55e4))
* remap same-repo GitHub URLs to local file paths
([#100](#100))
([b4feadd](b4feadd))
* **renovate-deps:** forward GITHUB_TOKEN as GITHUB_COM_TOKEN
([#132](#132))
([4d6510b](4d6510b))
* replace broken release-please PR comment with docs
([#12](#12))
([817b37d](817b37d))
* run shellcheck on .bats files in native mode
([#137](#137))
([a4fd3f8](a4fd3f8))
* strip Scroll to Text Fragment anchors in link checks
([#86](#86))
([b630cdf](b630cdf))
* tighten markdownlint config for native mode
([#106](#106))
([6ef25b2](6ef25b2))
* use remap instead of exclude for issue comment anchors
([#58](#58))
([656f355](656f355))

---
> [!IMPORTANT]
> Close and reopen this PR to trigger CI checks.

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This was referenced Apr 16, 2026
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.

2 participants