Commit Graph
89 Commits
Author SHA1 Message Date
mroberts 70188eb4ea fix(git): use jj as diff source in jujutsu repos
In a colocated jj repo, jj does not maintain git's index for git's own
consumption. git can therefore report an unmodified tracked file as a
whole-file add: for tests/integration/test_texttoentities_endpoint.py in
the IO repo, `git ls-tree HEAD` and `git ls-files -s` both showed the same
blob, yet `git status` reported `AM` and `git diff --cached --unified=0`
emitted a single `@@ -0,0 +1,330 @@` hunk.

shush treats every line in that hunk as agent-changed, so `--changes-only`
stripped all six comments from a file the agent had never touched (`jj diff`
confirmed 0 insertions). Diffing against HEAD instead of the index does not
help: it is poisoned the same way.

jj is authoritative when present, so DetectRepo now prefers `jj root` and
the three change queries route to `jj diff --git --context=0`. jj has no
staging area, so --staged, --unstaged and --changes-only all resolve to the
working-copy change; GetChangesOnly short-circuits so files are not
duplicated across the staged and unstaged passes.

Empty line ranges are overloaded to mean "process the whole file" (untracked
semantics). A deletion-only change parses to zero ranges, which would have
made shush strip an entire file whose only edit removed lines, so such files
are now skipped. New files still get correct full-file ranges from jj's
`@@ -0,0 +1,N @@` hunk, so they do not need the fallback.

Pagers are disabled explicitly on every git and jj invocation so output
stays machine-parseable regardless of the user's config.
2026-07-21 15:07:46 -05:00
mroberts 33b1b2370b ci(release): make release idempotent; bump to 0.6.1
CI / build (push) Successful in 1m34s
tea releases create fails if a release already exists, leaving stale
binaries on tag re-push. Delete any existing release for the tag first
so re-runs self-heal.
2026-07-17 12:54:00 -05:00
mroberts bb963169dd feat(hooks): add --hook-output flag reporting removed comments
Emits Claude Code PostToolUse JSON so automated comment removal is
announced in-context instead of appearing as a silent mutation.
--install-hook now writes 'shush --changes-only --hook-output'.

Bump version to 0.6.0.
2026-07-17 12:42:41 -05:00
mroberts e5536f9cce chore: bump version to 0.5.0
Also point make push at origin; upstream remote does not exist.
2026-07-08 13:24:29 -05:00
mroberts 59c48a36cb feat(config): preserve doc-style comments by default
Strip pass was eating JSDoc/Javadoc blocks. Add default preserve
patterns for /** blocks, /*! banners, /// and //! line docs.
Opt out by overriding preserve in .shush.toml.
2026-07-08 13:24:29 -05:00
mroberts 272ce89ec5 fix(git): bypass external diff driver; preserve version pins and zizmor
- git: pass --no-ext-diff so difftastic/other diff.external drivers don't
  break --unified=0 parsing (was yielding zero ranges -> whole-file strip)
- config: add /regex/ preserve patterns; keep version pins (# v2.1.6) and
  zizmor: directives by default
- bump version to 0.4.2
2026-07-03 12:49:46 -05:00
mroberts 80e93e9e15 ci: make tea login idempotent (delete stale login before add) 2026-07-03 09:23:37 -05:00
mroberts f8d3199bde chore: bump version to 0.4.1 2026-07-03 09:16:03 -05:00
mroberts 480aebfcd0 feat(config): preserve lint/tool directives by default across supported languages 2026-07-03 09:00:21 -05:00
mroberts 57bb1c4b62 chore: bump version to 0.4.0 2026-07-02 09:54:51 -05:00
mroberts a7a561fbbd ci: add Gitea release workflow using tea CLI 2026-07-02 09:20:06 -05:00
mroberts 41a491564f ci: add Gitea Actions build/test workflow 2026-07-02 09:20:06 -05:00
mroberts 85f83a8aaf test(languages): tier-1 language comment-removal goldens 2026-07-02 09:20:06 -05:00
mroberts 2f37640302 feat(languages): register tier-1 languages and chroma routing 2026-07-02 09:20:06 -05:00
mroberts 22e2c2d169 docs: tier-1 language additions plan 2026-07-02 09:20:06 -05:00
mroberts fda9a8a295 fix(processor): annotate every removed line in multi-line preview windows 2026-07-02 09:20:06 -05:00
mroberts 2711f141fd docs: note .sass routes through SCSS lexer 2026-07-02 09:20:06 -05:00
mroberts b07ea41c60 test(processor): multi-line golden fixtures; route .sass through SCSS lexer 2026-07-02 09:20:06 -05:00
mroberts bbc49efbfe feat(processor): route preview paths through StripComments 2026-07-02 09:20:06 -05:00
mroberts 7ef198016e feat(processor): route mutation paths through StripComments 2026-07-02 09:20:06 -05:00
mroberts 3e73ce7b2e build: require go 1.25 (chroma v2.27) and align release workflow 2026-07-02 09:20:06 -05:00
mroberts 811f1c13ff feat(processor): StripComments chroma engine with legacy fallback 2026-07-02 09:20:06 -05:00
mroberts 82b84c12d2 feat(processor): add chroma dep, lexer resolution and drop rules 2026-07-02 09:20:06 -05:00
mroberts c348204a47 docs: multi-line comment implementation plan (chroma) 2026-07-02 09:20:06 -05:00
mroberts 711691559b docs: rewrite multi-line comment spec around chroma tokenizer 2026-07-02 09:20:06 -05:00
mroberts c59a782d7d docs: multi-line block comment support design spec 2026-07-02 09:20:06 -05:00
mroberts 16fc10c59a test(processor): remove code comments from wholefile_test 2026-07-02 09:20:06 -05:00
mroberts 31619dc7ee test(processor): guard -update against CI misuse; drop agent report md 2026-07-02 09:20:06 -05:00
mroberts 3db4911e7a test(processor): git-mode whole-file and line-range cases 2026-07-02 09:20:06 -05:00
mroberts a117f75bba test(processor): preservation, preserve-lines, backup cases 2026-07-02 09:20:06 -05:00
mroberts 42c46aa2d5 test(processor): single-line block + inline/block flag cases 2026-07-02 09:20:06 -05:00
mroberts d3ab6a41be test(processor): line-comment, string-protection, structure cases 2026-07-02 09:20:06 -05:00
mroberts f51fb3f170 test(processor): whole-file golden driver + seed python cases 2026-07-02 09:20:06 -05:00
mroberts 9e9b292a6f refactor(processor): inject cfg into file-mutating methods 2026-07-02 09:20:06 -05:00
mroberts 27681bc56a wip: baseline before wholefile tests 2026-07-02 09:20:06 -05:00
carraes d2df2ec3d4 docs: clean up docs 2025-07-09 09:13:33 -03:00
carraes 47d2c0ba43 feat: improve hook CLI interface and reduce timeout
- Replace -s project flag with cleaner --project boolean flag
- Reduce hook timeout from 30s to 5s for better responsiveness
- Update README with new syntax
2025-07-09 06:47:15 -03:00
carraes c3e401a19e chore: bump version to 0.3.2 2025-07-09 06:17:35 -03:00
carraes be0aea96de feat: add automatic .gitignore respect to file exclusion 2025-07-09 06:16:16 -03:00
carraes 64663b27a7 docs: update README with .shushignore and context lines features 2025-07-07 15:40:59 -03:00
carraes 6e78bc9700 feat: add .shushignore support for flexible file exclusion
- Add .shushignore file support (project root + global ~/.config/.shushignore)
- Support gitignore-style patterns: wildcards (*), directories (dir/), negation (\!pattern)
- Universal integration: works with all processing modes (files, directories, git-aware)
- Smart messaging: explicit ignore messages for direct file access
- Silent skipping: directory traversal automatically skips ignored files
- Enhanced verbose output: distinguishes between ignored vs unsupported files
- Pattern examples: *.tmp, build/, test*.js, \!important.js
2025-07-07 15:39:20 -03:00
carraes c50bd8f203 chore: bump version to 0.3.0 2025-07-07 14:37:17 -03:00
carraes d2dc3d8c36 feat: add context lines for preview mode with intelligent truncation
- Add --context-lines (-c) flag to control preview context display
- Add context_lines option to .shush.toml configuration
- Implement lazy-git style preview with context lines around changes
- Add intelligent truncation with "..." markers for distant changes
- Improve context line colors from dark gray to light for better visibility on dark terminals
- Support both regular and git-aware preview modes
- Default to 3 context lines, configurable via flag or config file
- Use -c 0 to show only changed lines (original behavior)
2025-07-07 14:36:58 -03:00
carraes 9109964235 fix: critical hooks bug - preserve all Claude Code settings
BREAKING BUG FIX: Hook installation was destroying existing Claude Code settings

- Fix critical data loss in --install-hook and --uninstall-hook commands
- Change ClaudeSettings to preserve ALL existing JSON settings via Data map
- Add automatic timestamped backup creation before any settings modification
- Implement surgical hook installation that adds to existing config structure
- Implement surgical hook removal that only removes shush hooks
- Prevent loss of user settings like includeCoAuthoredBy, themes, etc.
- Add comprehensive error handling for malformed settings files

This was a critical data loss bug that could destroy users' Claude Code configurations.
All existing settings are now preserved during hook operations.

Fixes: Users losing their Claude Code settings during hook installation
Added: Automatic backups with timestamp (settings.json.backup.TIMESTAMP)
Improved: Hook management now respects existing PostToolUse configurations
2025-07-07 14:18:59 -03:00
carraes 3aff5e644a chore: bump version to 0.2.2 2025-07-07 09:32:18 -03:00
carraes 79b20776fc feat: update acronym to 'Hushing' and fix backup creation bug
- Update SHUSH acronym from 'Hiding' to 'Hushing' (better reflects removal)
- Fix critical error handling bug in file backup creation using io.Copy
- Remove golangci-lint references from Makefile and CLAUDE.md
- Update README, LLM guide, and CLI description with new acronym
- Create TASKS.md to track project improvements
2025-07-07 09:31:37 -03:00
carraes 8152e62cf5 feat: add support for 30+ languages and update README
- Add support for Rust, C#, PHP, Swift, Kotlin, SQL
- Add support for HTML, XML, CSS, SCSS markup languages
- Add support for JSX/TSX, Dart, Scala
- Add support for shell variants, config files, and more
- Add AlternateLineComment support for INI files
- Update README with comprehensive language tables
- Bump version to 0.2.1
2025-07-06 22:02:41 -03:00
carraes 0b9067daf5 chore: bump version to 0.2.0 2025-07-06 19:26:31 -03:00
carraes fae70c6b2b style: apply code formatting and linting fixes
- Remove unnecessary blank lines and improve spacing
- Fix linting warnings (remove redundant nil checks)
- Standardize indentation and formatting
- No functional changes, only style improvements
2025-07-06 12:01:32 -03:00
carraes ea1a50ba33 test(processor): fix and enhance string-aware parsing tests
- Fix broken string literals in test cases (caused by previous shush bug)
- Add comprehensive tests for all supported comment types
- Add edge case tests for string literals with comment markers
- Verify --inline, --block, and no-flag behaviors
- All tests now passing with improved coverage
2025-07-06 12:01:22 -03:00