mirror of
https://github.com/lukaszraczylo/filepuff-mcp.git
synced 2026-10-18 05:48:00 +00:00
refactor(edit): remove auto-indentation and add line-ending normalization
- [x] Remove auto-indentation from text mode edits (caller controls whitespace) - [x] Add line-ending detection and normalization for both AST and text modes - [x] Share edit logic via new `spliceContent` function for both modes - [x] Fix diff to emit "No newline at end of file" markers - [x] Fix diff to strip raw CR from CRLF file output - [x] Remove double-unescape of backslash sequences in new_content - [x] Fix countDiffLines to be hunk-aware (correctly count lines starting with +/-) - [x] Fix block-comment stripping to remove standalone lines cleanly - [x] Fix Python license header stripping to preserve separator blank lines
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
package parser
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/lukaszraczylo/mcp-filepuff/pkg/protocol"
|
||||
)
|
||||
|
||||
// An inline block comment (code before it on the same line) must not cause the following
|
||||
// line to be merged onto it — the line's terminator must survive.
|
||||
func TestStripBlockCommentInlineNoLineMerge(t *testing.T) {
|
||||
got := StripContent("a := 1 /* note */\nb := 2\n", []StripFlag{StripBlockComments}, protocol.LangGo)
|
||||
want := "a := 1 \nb := 2\n"
|
||||
if got.Content != want {
|
||||
t.Fatalf("inline block comment must not merge lines.\nwant: %q\ngot: %q", want, got.Content)
|
||||
}
|
||||
}
|
||||
|
||||
// A standalone block-comment line (only whitespace before it) is removed in full,
|
||||
// including its indentation and terminator — no stray blank/whitespace line left behind.
|
||||
func TestStripBlockCommentStandaloneRemovesLine(t *testing.T) {
|
||||
got := StripContent("x\n\t/* c */\ny\n", []StripFlag{StripBlockComments}, protocol.LangGo)
|
||||
want := "x\ny\n"
|
||||
if got.Content != want {
|
||||
t.Fatalf("standalone block comment line must be removed cleanly.\nwant: %q\ngot: %q", want, got.Content)
|
||||
}
|
||||
}
|
||||
|
||||
// On a CRLF file, removing a standalone block-comment line must consume the full \r\n
|
||||
// terminator rather than leaving a stray blank (bare-CR) line.
|
||||
func TestStripBlockCommentCRLFNoStrayBlank(t *testing.T) {
|
||||
got := StripContent("code\r\n/* c */\r\nmore\r\n", []StripFlag{StripBlockComments}, protocol.LangGo)
|
||||
want := "code\r\nmore\r\n"
|
||||
if got.Content != want {
|
||||
t.Fatalf("CRLF standalone block comment must not leave a stray blank line.\nwant: %q\ngot: %q", want, got.Content)
|
||||
}
|
||||
}
|
||||
|
||||
// Stripping a hash-style license header must not greedily swallow the blank separator
|
||||
// line that follows it.
|
||||
func TestStripLicensePythonPreservesSeparatorBlank(t *testing.T) {
|
||||
got := StripContent("# Copyright 2024\n# License MIT\n\ncode\n", []StripFlag{StripLicense}, protocol.LangPython)
|
||||
want := "\ncode\n"
|
||||
if got.Content != want {
|
||||
t.Fatalf("python license strip must keep the blank separator.\nwant: %q\ngot: %q", want, got.Content)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user