Skip to content

Commit ebbc4e2

Browse files
authored
fix(ext-gen): skip README.md generation in extension-init command if it exists (#2283)
Currently, the `extension-init` command automatically generates a boilerplate `README.md`. While helpful for initial setups, this behavior becomes destructive during the iterative development phase. If a developer has customized their README and later runs `extension-init` to update function signatures or add new functions, their custom documentation is overwritten without warning.
1 parent 4dcf6aa commit ebbc4e2

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

internal/extgen/docs.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package extgen
33
import (
44
"bytes"
55
_ "embed"
6+
"os"
67
"path/filepath"
78
"text/template"
89
)
@@ -22,6 +23,11 @@ type DocTemplateData struct {
2223

2324
func (dg *DocumentationGenerator) generate() error {
2425
filename := filepath.Join(dg.generator.BuildDir, "README.md")
26+
27+
if _, err := os.Stat(filename); err == nil {
28+
return nil
29+
}
30+
2531
content, err := dg.generateMarkdown()
2632
if err != nil {
2733
return err

internal/extgen/docs_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,3 +383,39 @@ func BenchmarkDocumentationGenerator_GenerateMarkdown(b *testing.B) {
383383
assert.NoError(b, err)
384384
}
385385
}
386+
387+
func TestDocumentationGenerator_SkipExistingReadme(t *testing.T) {
388+
tempDir := t.TempDir()
389+
readmePath := filepath.Join(tempDir, "README.md")
390+
391+
err := os.WriteFile(readmePath, []byte("hello"), 0644)
392+
require.NoError(t, err)
393+
394+
generator := &Generator{
395+
BaseName: "testextension",
396+
BuildDir: tempDir,
397+
Functions: []phpFunction{
398+
{
399+
Name: "greet",
400+
ReturnType: phpString,
401+
Params: []phpParameter{
402+
{Name: "name", PhpType: phpString},
403+
},
404+
Signature: "greet(string $name): string",
405+
},
406+
},
407+
Classes: []phpClass{},
408+
}
409+
410+
docGen := &DocumentationGenerator{
411+
generator: generator,
412+
}
413+
414+
err = docGen.generate()
415+
assert.NoError(t, err, "generate() unexpected error")
416+
417+
content, err := os.ReadFile(readmePath)
418+
require.NoError(t, err, "Failed to read generated README.md")
419+
420+
assert.Equal(t, string(content), "hello")
421+
}

0 commit comments

Comments
 (0)