Skip to content

Support context in line ranges#3345

Merged
keith-hall merged 12 commits intosharkdp:masterfrom
cavanaug:master
Aug 20, 2025
Merged

Support context in line ranges#3345
keith-hall merged 12 commits intosharkdp:masterfrom
cavanaug:master

Conversation

@cavanaug
Copy link
Copy Markdown
Contributor

docs(long-help.txt): 📚 add examples for N::C and N:M:C context syntax
docs(clap_app.rs): 📚 update CLI help text with context syntax examples
feat(line_range.rs): ✨ implement N::C and N:M:C parsing and add tests

I decided to just take a stab at fixing the issue #3344 that I submitted to allow for providing a line number and how many lines of context to show.

docs(long-help.txt): 📚 add examples for N::C and N:M:C context syntax
docs(clap_app.rs): 📚 update CLI help text with context syntax examples
feat(line_range.rs): ✨ implement N::C and N:M:C parsing and add tests
Copilot AI review requested due to automatic review settings July 15, 2025 23:21
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

Adds support for context-aware line-range syntax in the CLI parser and documentation.

  • Implements parsing of N::C (single-line with context) and N:M:C (range with context) in line_range.rs
  • Updates long-help.txt to include examples for the new syntax
  • Adds unit tests covering valid and invalid context-syntax cases

Reviewed Changes

Copilot reviewed 2 out of 3 changed files in this pull request and generated 1 comment.

File Description
src/line_range.rs Added a new match arm to handle N::C and N:M:C parsing and tests
doc/long-help.txt Updated long-form CLI help examples to demonstrate context syntax
Comments suppressed due to low confidence (1)

doc/long-help.txt:197

  • The CLI help text in clap_app.rs should also be updated to reflect the new N::C and N:M:C context syntax, ensuring consistency across documentation.
            '--line-range 35::5' prints lines 30 to 40 (line 35 with 5 lines of context)

new_range.upper = RangeBound::Absolute(upper_absolute_bound);
Ok(new_range)
}
3 => {
Copy link

Copilot AI Jul 15, 2025

Choose a reason for hiding this comment

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

[nitpick] The logic for computing saturating lower and upper bounds is duplicated in both the N::C and N:M:C branches; consider extracting a helper function to encapsulate this behavior and reduce duplication.

Copilot uses AI. Check for mistakes.
cavanaug added 2 commits July 15, 2025 16:25
docs(CHANGELOG.md): 📚 add entry for context in line ranges and normalize list formatting
style(src/line_range.rs): 🎨 trim trailing whitespace in context parsing code
fix(src/line_range.rs): 🐛 support three-part (start:end:context) syntax, clamp lower at zero and extend upper, and add tests for invalid formats
@cavanaug cavanaug changed the title feat: ✨ add context support to line-range syntax (#3344) Support context in line ranges Jul 15, 2025
Copy link
Copy Markdown
Collaborator

@keith-hall keith-hall left a comment

Choose a reason for hiding this comment

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

Thanks, this seems reasonable to me, I like that you explained the use case in the issue 🙂 I wonder, would it be possible to add some integration tests do you think, please? 🙂

@cavanaug
Copy link
Copy Markdown
Contributor Author

Thanks, this seems reasonable to me, I like that you explained the use case in the issue 🙂 I wonder, would it be possible to add some integration tests do you think, please? 🙂

Sure, let me look into how to add those tests. Ill try to get to it over the weekend...

cavanaug and others added 3 commits August 13, 2025 23:27
test(tests/examples/multiline.txt): 🚨 add lines 5-20 to sample file for expanded line-range tests
test(tests/integration_tests.rs): 🚨 update expected outputs and add comprehensive context and error tests for line-range feature
style(integration_tests.rs): 🎨 doh, run cargo fmt
@cavanaug
Copy link
Copy Markdown
Contributor Author

I added lines to the multiline.txt file so I had more flexibility in testing various ranges and context. I updated 2 of the tests that used this file previously so things are still appropriate.

test(tests/examples/multiline.txt): 🚨 trim sample file to 10 lines to match new behavior
test(tests/integration_tests.rs): 🚨 adjust line ranges and expected outputs for 10-line sample; add multi-range context test
@keith-hall keith-hall enabled auto-merge August 20, 2025 03:42
@keith-hall keith-hall merged commit 1c6ad4d into sharkdp:master Aug 20, 2025
24 checks passed
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Oct 22, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [sharkdp/bat](https://github.com/sharkdp/bat) | minor | `v0.25.0` -> `v0.26.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>sharkdp/bat (sharkdp/bat)</summary>

### [`v0.26.0`](https://github.com/sharkdp/bat/blob/HEAD/CHANGELOG.md#v0260)

[Compare Source](sharkdp/bat@v0.25.0...v0.26.0)

#### Features

- Add build for windows/ARM64 platform. [#&#8203;3190](sharkdp/bat#3190) ([@&#8203;alcroito](https://github.com/alcroito))
- Add paging to `--list-themes`, see MR [#&#8203;3239](sharkdp/bat#3239) ([@&#8203;einfachIrgendwer0815](https://github.com/einfachIrgendwer0815))
- Support negative relative line ranges, e.g. `bat -r :-10` / `bat -r='-10:'`, see [#&#8203;3068](sharkdp/bat#3068) ([@&#8203;ajesipow](https://github.com/ajesipow))
- Support context in line ranges, e.g. `bat -r 30::5` /  `bat -r 30:40:5`, see [#&#8203;3345](sharkdp/bat#3345) ([@&#8203;cavanaug](https://github.com/cavanaug))
- Add built-in 'minus' pager, e.g. `bat --pager=builtin` see MR [#&#8203;3402](sharkdp/bat#3402) ([@&#8203;academician](https://github.com/academician))

#### Bugfixes

- Fix UTF-8 BOM not being stripped for syntax detection, see [#&#8203;3314](sharkdp/bat#3314) ([@&#8203;krikera](https://github.com/krikera))
- Fix `BAT_THEME_DARK` and `BAT_THEME_LIGHT` being ignored, see issue [#&#8203;3171](sharkdp/bat#3171) and MR [#&#8203;3168](sharkdp/bat#3168) ([@&#8203;bash](https://github.com/bash))
- Prevent `--list-themes` from outputting default theme info to stdout when it is piped, see [#&#8203;3189](sharkdp/bat#3189) ([@&#8203;einfachIrgendwer0815](https://github.com/einfachIrgendwer0815))
- Rename some submodules to fix Dependabot submodule updates, see issue [#&#8203;3198](sharkdp/bat#3198) and MR [#&#8203;3201](sharkdp/bat#3201) ([@&#8203;victor-gp](https://github.com/victor-gp))
- Make highlight tests fail when new syntaxes don't have fixtures MR [#&#8203;3255](sharkdp/bat#3255) ([@&#8203;dan-hipschman](https://github.com/dan-hipschman))
- Fix crash for multibyte characters in file path, see issue [#&#8203;3230](sharkdp/bat#3230) and MR [#&#8203;3245](sharkdp/bat#3245) ([@&#8203;HSM95](https://github.com/HSM95))
- Add missing mappings for various bash/zsh files, see MR [#&#8203;3262](sharkdp/bat#3262) ([@&#8203;AdamGaskins](https://github.com/AdamGaskins))
- Send all bat errors to stderr by default, see [#&#8203;3336](sharkdp/bat#3336) ([@&#8203;JerryImMouse](https://github.com/JerryImMouse))
- Make --map-syntax target case insensitive to match --language, see [#&#8203;3206](sharkdp/bat#3206) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Correctly determine the end of the line in UTF16LE/BE input [#&#8203;3369](sharkdp/bat#3369) ([@&#8203;keith-hall](https://github.com/keith-hall))
- `--style=changes` no longer prints a two-space indent when the file is unmodified, see issue [#&#8203;2710](sharkdp/bat#2710) and MR [#&#8203;3406](sharkdp/bat#3406) ([@&#8203;jyn514](https://github.com/jyn514))
- Add missing shell completions, see [#&#8203;3411](sharkdp/bat#3411) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Execute help/version/diagnostic commands even with invalid config/arguments present, see [#&#8203;3414](sharkdp/bat#3414) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Fixed line numbers (`-n`) and style components not printing when piping output, see issue [#&#8203;2935](sharkdp/bat#2935) and MR [#&#8203;3438](sharkdp/bat#3438) ([@&#8203;lmmx](https://github.com/lmmx))

#### Other

- Update base16 README links to community driven base16 work [#&#8203;2871](sharkdp/bat#2871) ([@&#8203;JamyGolden](https://github.com/JamyGolden))
- Work around build failures when building `bat` from vendored sources [#&#8203;3179](sharkdp/bat#3179) ([@&#8203;dtolnay](https://github.com/dtolnay))
- CICD: Stop building for x86\_64-pc-windows-gnu which fails [#&#8203;3261](sharkdp/bat#3261) (Enselic)
- CICD: replace windows-2019 runners with windows-2025 [#&#8203;3339](sharkdp/bat#3339) ([@&#8203;cyqsimon](https://github.com/cyqsimon))
- Build script: replace string-based codegen with quote-based codegen [#&#8203;3340](sharkdp/bat#3340) ([@&#8203;cyqsimon](https://github.com/cyqsimon))
- Improve code coverage of `--list-languages` parameter [#&#8203;2942](sharkdp/bat#2942) ([@&#8203;sblondon](https://github.com/sblondon))
- Only start offload worker thread when there's more than 1 core [#&#8203;2956](sharkdp/bat#2956) ([@&#8203;cyqsimon](https://github.com/cyqsimon))
- Update terminal-colorsaurus (the library used for dark/light detection) to 1.0, see [#&#8203;3347](sharkdp/bat#3347) ([@&#8203;bash](https://github.com/bash))
- Update console dependency to 0.16, see [#&#8203;3351](sharkdp/bat#3351) ([@&#8203;musicinmybrain](https://github.com/musicinmybrain))
- Fixed some typos [#&#8203;3244](sharkdp/bat#3244) ([@&#8203;ssbarnea](https://github.com/ssbarnea))
- Update onig\_sys dependency to 69.9.1 to fix a gcc build failure [#&#8203;3400](sharkdp/bat#3400) ([@&#8203;CosmicHorrorDev](https://github.com/CosmicHorrorDev))
- Add a cargo feature (`vendored-libgit2`) to build with vendored libgit2 version without depending on the system's one [#&#8203;3426](sharkdp/bat#3426) ([@&#8203;0x61nas](https://github.com/0x61nas))
- Update syntect dependency to v5.3.0 to fix a few minor bugs, see [#&#8203;3410](sharkdp/bat#3410) ([@&#8203;keith-hall](https://github.com/keith-hall))

#### Syntaxes

- Add syntax mapping for `paru` configuration files [#&#8203;3182](sharkdp/bat#3182) ([@&#8203;cyqsimon](https://github.com/cyqsimon))
- Add support for [Idris 2 programming language](https://www.idris-lang.org/) [#&#8203;3150](sharkdp/bat#3150) ([@&#8203;buzden](https://github.com/buzden))
- Add syntax mapping for `nix`'s '`flake.lock` lockfiles [#&#8203;3196](sharkdp/bat#3196) ([@&#8203;odilf](https://github.com/odilf))
- Improvements to CSV/TSV highlighting, with autodetection of delimiter and support for TSV files, see [#&#8203;3186](sharkdp/bat#3186) ([@&#8203;keith-](https://github.com/keith-)
- Improve (Sys)log error highlighting, see [#&#8203;3205](sharkdp/bat#3205) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Map `ndjson` extension to JSON syntax, see [#&#8203;3209](sharkdp/bat#3209) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Map files with `csproj`, `vbproj`, `props` and `targets` extensions to XML syntax, see [#&#8203;3213](sharkdp/bat#3213) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Add debsources syntax to highlight `/etc/apt/sources.list` files, see [#&#8203;3215](sharkdp/bat#3215) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Add syntax definition and test file for GDScript highlighting, see [#&#8203;3236](sharkdp/bat#3236) ([@&#8203;chetanjangir0](https://github.com/chetanjangir0))
- Add syntax test file for Odin highlighting, see [#&#8203;3241](sharkdp/bat#3241) ([@&#8203;chetanjangir0](https://github.com/chetanjangir0))
- Update quadlet syntax mapping rules to cover quadlets in subdirectories [#&#8203;3299](sharkdp/bat#3299) ([@&#8203;cyqsimon](https://github.com/cyqsimon))
- Add syntax Typst [#&#8203;3300](sharkdp/bat#3300) ([@&#8203;cskeeters](https://github.com/cskeeters))
- Map `.mill` files to Scala syntax for Mill build tool configuration files [#&#8203;3311](sharkdp/bat#3311) ([@&#8203;krikera](https://github.com/krikera))
- Add syntax highlighting for VHDL, see [#&#8203;3337](sharkdp/bat#3337) ([@&#8203;JerryImMouse](https://github.com/JerryImMouse))
- Add syntax mapping for certbot certificate configuration [#&#8203;3338](sharkdp/bat#3338) ([@&#8203;cyqsimon](https://github.com/cyqsimon))
- Update Lean syntax from Lean 3 to Lean 4 [#&#8203;3322](sharkdp/bat#3322) ([@&#8203;YDX-2147483647](https://github.com/YDX-2147483647))
- Map `.flatpakref` and `.flatpakrepo` files to INI syntax [#&#8203;3353](sharkdp/bat#3353) ([@&#8203;Ferenc-](https://github.com/Ferenc-))
- Update hosts syntax [#&#8203;3368](sharkdp/bat#3368) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Map `.kshrc` files to Bash syntax [#&#8203;3364](sharkdp/bat#3364) ([@&#8203;ritoban23](https://github.com/ritoban23))
- Map `/var/log/dmesg` files to Syslog syntax [#&#8203;3412](sharkdp/bat#3412) ([@&#8203;keith-hall](https://github.com/keith-hall))
- Add syntax definition and test file for Go modules(`go.mod` and `go.sum`) highlighting, see [#&#8203;3424](sharkdp/bat#3424) ([@&#8203;DarkMatter-999](https://github.com/DarkMatter-999))
- Syntax highlighting for typescript code blocks within Markdown files, see [#&#8203;3435](sharkdp/bat#3435) ([@&#8203;MuntasirSZN](https://github.com/MuntasirSZN))

#### Themes

- Add Catppuccin, see [#&#8203;3317](sharkdp/bat#3317) ([@&#8203;SchweGELBin](https://github.com/SchweGELBin))
- Updated Catppuccin, see [#&#8203;3333](sharkdp/bat#3333) ([@&#8203;SchweGELBin](https://github.com/SchweGELBin))
- Updated gruvbox, see [#&#8203;3372](sharkdp/bat#3372) ([@&#8203;Nicholas42](https://github.com/Nicholas42))
- Updated GitHub theme, see [#&#8203;3382](sharkdp/bat#3382) ([@&#8203;CosmicHorrorDev](https://github.com/CosmicHorrorDev))
- Updated ANSI theme to highlight JSON object keys differently from values, see [#&#8203;3413](sharkdp/bat#3413) ([@&#8203;keith-hall](https://github.com/keith-hall))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNTEuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE1Mi45IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
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