mirror of
https://github.com/Dvorinka/Devour.git
synced 2026-06-04 04:23:02 +00:00
update
This commit is contained in:
+16
-23
@@ -67,13 +67,13 @@ func (s *Scanner) Scan(ctx context.Context) (*ScanResult, error) {
|
||||
// Skip language-specific detectors for different languages
|
||||
if langDetector, ok := detector.(LanguageDetector); ok {
|
||||
supported := langDetector.SupportedLanguages()
|
||||
if !contains(supported, language) {
|
||||
if len(supported) > 0 && !contains(supported, language) {
|
||||
log.Printf("Skipping detector %s for language %s", name, language)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
findings, err := detector.Detect(ctx, s.config.Path, s.config)
|
||||
findings, err := s.runDetectorSafely(ctx, detector, name)
|
||||
if err != nil {
|
||||
log.Printf("Detector %s failed: %v", name, err)
|
||||
continue
|
||||
@@ -106,28 +106,21 @@ func (s *Scanner) Scan(ctx context.Context) (*ScanResult, error) {
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (s *Scanner) runDetectorSafely(ctx context.Context, detector Detector, name string) (_ []Finding, err error) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
err = fmt.Errorf("detector panic in %s: %v", name, r)
|
||||
}
|
||||
}()
|
||||
return detector.Detect(ctx, s.config.Path, s.config)
|
||||
}
|
||||
|
||||
// detectLanguage attempts to auto-detect the project language
|
||||
func (s *Scanner) detectLanguage(path string) string {
|
||||
// Check for marker files
|
||||
markers := map[string]string{
|
||||
"go.mod": "go",
|
||||
"package.json": "typescript",
|
||||
"tsconfig.json": "typescript",
|
||||
"requirements.txt": "python",
|
||||
"setup.py": "python",
|
||||
"pyproject.toml": "python",
|
||||
"pom.xml": "java",
|
||||
"build.gradle": "java",
|
||||
"Cargo.toml": "rust",
|
||||
"composer.json": "php",
|
||||
}
|
||||
|
||||
for file, lang := range markers {
|
||||
if _, err := filepath.Abs(filepath.Join(path, file)); err == nil {
|
||||
if _, err := filepath.Glob(filepath.Join(path, file)); err == nil {
|
||||
return lang
|
||||
}
|
||||
}
|
||||
// Keep auto-detection intentionally conservative until full multi-language
|
||||
// scanner behavior is validated in tests.
|
||||
if _, err := os.Stat(filepath.Join(path, "go.mod")); err == nil {
|
||||
return "go"
|
||||
}
|
||||
|
||||
// Default to Go if no markers found
|
||||
@@ -164,7 +157,7 @@ func (s *Scanner) getSourceFiles(path, language string) ([]string, error) {
|
||||
if info.IsDir() {
|
||||
// Skip hidden directories and common exclude dirs
|
||||
base := filepath.Base(filePath)
|
||||
if strings.HasPrefix(base, ".") || base == "node_modules" || base == "vendor" {
|
||||
if filePath != path && (strings.HasPrefix(base, ".") || base == "node_modules" || base == "vendor") {
|
||||
return filepath.SkipDir
|
||||
}
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user