diff --git a/scripts/coding_discovery_tools/constants.py b/scripts/coding_discovery_tools/constants.py index c855991..f887ad8 100644 --- a/scripts/coding_discovery_tools/constants.py +++ b/scripts/coding_discovery_tools/constants.py @@ -37,8 +37,9 @@ MAX_SEARCH_DEPTH = 10 # Maximum directory depth to search recursively SKIP_DIRS = frozenset[str]({ '.git', 'node_modules', 'venv', '__pycache__', '.venv', 'vendor', '.idea', '.vscode', 'Library', '.Trash', '.cache', - 'Photos', 'Music', 'Movies', 'Pictures', 'Videos' + 'Photos', 'Music', 'Movies', 'Pictures', 'Public', 'Templates', 'Videos' }) + # System directories to skip when searching from root (macOS/Unix) SKIP_SYSTEM_DIRS = { '/System', '/Library', '/private', '/usr', '/bin', '/sbin', '/opt', diff --git a/scripts/coding_discovery_tools/macos_extraction_helpers.py b/scripts/coding_discovery_tools/macos_extraction_helpers.py index 1bda478..1f2a8ec 100644 --- a/scripts/coding_discovery_tools/macos_extraction_helpers.py +++ b/scripts/coding_discovery_tools/macos_extraction_helpers.py @@ -9,13 +9,14 @@ import os from datetime import datetime from pathlib import Path +import re from typing import List, Dict, Optional, Tuple from .constants import MAX_CONFIG_FILE_SIZE, MAX_SEARCH_DEPTH, SKIP_DIRS, SKIP_SYSTEM_DIRS from .mcp_extraction_helpers import is_home_dotdir_descendant logger = logging.getLogger(__name__) - +SKIP_PATTERN = re.compile("|".join(map(str, map(re.escape, SKIP_DIRS))), re.IGNORECASE) def is_running_as_root() -> bool: """ @@ -88,7 +89,7 @@ def should_skip_path(path: Path) -> bool: Returns: True if path should be skipped, False otherwise """ - return any(part in SKIP_DIRS for part in path.parts) + return any(SKIP_PATTERN.search(part) for part in path.parts) def should_skip_system_path(path: Path) -> bool: diff --git a/scripts/coding_discovery_tools/windows/cursor_cli/settings_extractor.py b/scripts/coding_discovery_tools/windows/cursor_cli/settings_extractor.py index 0c71900..98613ef 100644 --- a/scripts/coding_discovery_tools/windows/cursor_cli/settings_extractor.py +++ b/scripts/coding_discovery_tools/windows/cursor_cli/settings_extractor.py @@ -26,7 +26,9 @@ from pathlib import Path from typing import Optional, List, Dict -from ...constants import MAX_SEARCH_DEPTH, SKIP_DIRS, WINDOWS_SKIP_USER_DIRS +from scripts.coding_discovery_tools.macos_extraction_helpers import SKIP_PATTERN as SKIPDIR_PATTERN + +from ...constants import MAX_SEARCH_DEPTH, WINDOWS_SKIP_USER_DIRS from ...windows_extraction_helpers import ( is_running_as_admin, read_file_content, @@ -182,7 +184,7 @@ def _walk_for_cursor_cli_settings( if not entry.is_dir(): continue - if entry.name in SKIP_DIRS or entry.name in system_dirs: + if SKIPDIR_PATTERN.search(entry.name) is not None or entry.name in system_dirs: continue if entry.name == self.CURSOR_DIR_NAME: diff --git a/scripts/coding_discovery_tools/windows_extraction_helpers.py b/scripts/coding_discovery_tools/windows_extraction_helpers.py index d47cf42..fa338cd 100644 --- a/scripts/coding_discovery_tools/windows_extraction_helpers.py +++ b/scripts/coding_discovery_tools/windows_extraction_helpers.py @@ -12,7 +12,9 @@ from pathlib import Path from typing import List, Dict, Optional, Tuple, Callable -from .constants import MAX_CONFIG_FILE_SIZE, SKIP_DIRS +from scripts.coding_discovery_tools.macos_extraction_helpers import SKIP_PATTERN + +from .constants import MAX_CONFIG_FILE_SIZE logger = logging.getLogger(__name__) @@ -155,7 +157,7 @@ def should_skip_path(path: Path, system_dirs: Optional[set] = None) -> bool: True if path should be skipped, False otherwise """ # Skip common project directories (check all path parts for nested matches) - if any(part in SKIP_DIRS for part in path.parts): + if any(path for path in path.parts if SKIP_PATTERN.search(path) is not None): return True # Skip system directories if provided (Windows-specific)