diff --git a/internal/extensions/loader.go b/internal/extensions/loader.go index 5da379bb..9b657e8c 100644 --- a/internal/extensions/loader.go +++ b/internal/extensions/loader.go @@ -133,7 +133,7 @@ func findExtensionsInDir(dir string) []string { for _, entry := range entries { full := filepath.Join(dir, entry.Name()) - if !entry.IsDir() && strings.HasSuffix(entry.Name(), ".go") { + if !entry.IsDir() && strings.HasSuffix(entry.Name(), ".go") && !strings.HasSuffix(entry.Name(), "_test.go") { results = append(results, full) } else if entry.IsDir() { main := filepath.Join(full, "main.go") @@ -190,9 +190,13 @@ func findExtensionsInRepo(repoPath string) []string { isExtDir := base == "extensions" || base == "ext" || strings.HasSuffix(base, "-extensions") || strings.HasSuffix(base, "-ext") - isExamplesSubdir := relPath == "examples" || strings.HasPrefix(relPath, "examples/") + // Allow walking into examples/ so we can reach examples/extensions/ etc, + // but don't treat examples/ itself or non-extension subdirs as extension locations. + if relPath == "examples" { + return nil + } - if !isExtDir && !isExamplesSubdir { + if !isExtDir { mainPath := filepath.Join(path, "main.go") if _, err := os.Stat(mainPath); err == nil { if relPath == base { // Top-level directory @@ -202,13 +206,6 @@ func findExtensionsInRepo(repoPath string) []string { } return filepath.SkipDir } - if isExamplesSubdir || isExtDir { - if !multiFileDirs[relPath] { - multiFileDirs[relPath] = true - results = append(results, mainPath) - } - return filepath.SkipDir - } } return filepath.SkipDir } @@ -227,7 +224,7 @@ func findExtensionsInRepo(repoPath string) []string { } // It's a file - if !strings.HasSuffix(info.Name(), ".go") { + if !strings.HasSuffix(info.Name(), ".go") || strings.HasSuffix(info.Name(), "_test.go") { return nil } diff --git a/internal/extensions/manifest.go b/internal/extensions/manifest.go index 217d7fc7..5e300bc2 100644 --- a/internal/extensions/manifest.go +++ b/internal/extensions/manifest.go @@ -253,10 +253,13 @@ func ScanForExtensions(dir string) ([]ExtensionPreview, error) { isExtDir := base == "extensions" || base == "ext" || strings.HasSuffix(base, "-extensions") || strings.HasSuffix(base, "-ext") - // Or check if it's a subdirectory of examples/ that might contain extensions - isExamplesSubdir := relPath == "examples" || strings.HasPrefix(relPath, "examples/") + // Allow walking into examples/ so we can reach examples/extensions/ etc, + // but don't treat examples/ itself or non-extension subdirs as extension locations. + if relPath == "examples" { + return nil + } - if !isExtDir && !isExamplesSubdir { + if !isExtDir { // Check for main.go before skipping mainPath := filepath.Join(path, "main.go") if _, err := os.Stat(mainPath); err == nil { @@ -272,18 +275,6 @@ func ScanForExtensions(dir string) ([]ExtensionPreview, error) { } return filepath.SkipDir } - // Inside a valid extensions directory - if isExamplesSubdir || isExtDir { - if !multiFileDirs[relPath] { - multiFileDirs[relPath] = true - previews = append(previews, ExtensionPreview{ - Path: "./" + relPath + "/main.go", - Name: deriveExtensionName(relPath+"/main.go", true), - IsMain: true, - }) - } - return filepath.SkipDir - } } // Not an extension location @@ -309,7 +300,7 @@ func ScanForExtensions(dir string) ([]ExtensionPreview, error) { } // It's a file - check if it's a valid extension - if !strings.HasSuffix(info.Name(), ".go") { + if !strings.HasSuffix(info.Name(), ".go") || strings.HasSuffix(info.Name(), "_test.go") { return nil }