[Feature] Skip files without markers on --insert: --skip-no-markers

Aperta
#96 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
55/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
github, go
Ambito
cli

Direzione di ricerca

Start by reading internal/core/usecase/insertmd and the marker rule in replaceBetweenMarkers, then trace how CLI options reach the insert flow and how tests cover --insert and --stdout. Implementing this requires resolving the stated behavior questions about malformed marker pairs and whether the option implies --insert. Done means skipped files avoid API requests and changes, emit the specified warning, and preserve errors and exit codes for other failures.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

enhancement

Is your feature request related to a problem? Please describe.

--insert cannot run on all markdown files of a directory when only some of them have the
<!--ts--> and <!--te--> markers. Every file without the markers is an error, and the
run exits with 1. Here a.md and c.md have the markers, b.md does not:

$ gh-md-toc --insert --no-backup --hide-footer a.md b.md c.md
...
process "b.md": insert TOC into "b.md": no <!--ts--> / <!--te--> markers found
$ echo $?
1

a.md and c.md are updated, but the exit code fails a script or a CI step. The markers
are checked after the GitHub API request, so a request is spent for every such file too.
The same request for the Bash version is ekalinin/github-markdown-toc#110, and it is
implemented there in ekalinin/github-markdown-toc#199.

Describe the solution you'd like

The same option as in the Bash version: --skip-no-markers skips a local file without the
markers, so this works:

find . -name '*.md' -exec gh-md-toc --insert --no-backup --hide-footer --skip-no-markers {} +

Behavior in the Bash version:

  • A skipped file is not changed, no backup is created for it, no request is sent to the
    GitHub API for it, and stdout has no TOC entries of it.
  • stderr gets <input>: Warning: no <!--ts--> or <!--te--> in the file, skipped, where
    <input> is the input as given on the command line, also with one input.
  • The exit code is 0 when files are only skipped. An error of another input, such as a
    GitHub API error, still exits with 1.
  • A local input that does not exist is not skipped: it is an error as before.
  • --skip-no-markers turns on --insert, as --no-backup and --hide-footer do there.
  • --skip-no-markers with --stdout (#95) is an error before any network call.

Additional context

  • The markers are checked in internal/core/usecase/insertmd after inner.DoAs, that is
    after the API request. The check for this option has to run before it, with the same
    marker rule as replaceBetweenMarkers.
  • Differences from the Bash version to decide on:
    • Here --no-backup requires --insert instead of turning it on. --skip-no-markers
      could follow the same rule.
    • Here a file with several marker pairs, or with <!--te--> before <!--ts-->, is an
      error too. Should it be skipped as well, or stay an error?
Lingua principale
Go
Stelle
525
Fork
89
Merge medio
6m
PR unite (30g)
1

Preparare l'ambiente

  • Include un Dockerfile o un file Docker Compose
  • Nessun modello di pull request
  • Nessuna guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di ekalinin/github-markdown-toc.go

Tutte le issue di ekalinin/github-markdown-toc.go

Issue simili

Altre issue su Go

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.