Initial commit: CodeMap v0.1.0 - CLI tool for code analysis and diagram generation
Some checks failed
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled

This commit is contained in:
2026-01-30 12:19:01 +00:00
parent bcb3850d51
commit c04e75f631

View File

@@ -0,0 +1,62 @@
import re
from pathlib import Path
from typing import List
from codemap.parsers.base import BaseParser, Dependency, ParsedFile
class JavaScriptParser(BaseParser):
supported_extensions = [".js", ".jsx", ".ts", ".tsx", ".mjs"]
IMPORT_PATTERNS = [
re.compile(r'^import\s+(?:\{[^}]*\}|\* as \w+|\w+)\s+from\s+["\']([^"\']+)["\']'),
re.compile(r'^import\s+["\']([^"\'])["\']'),
re.compile(r'require\s*\(\s*["\']([^"\']+)["\']\s*\)'),
re.compile(r'import\s*\(\s*["\']([^"\']+)["\']\s*\)'),
]
ES6_FROM_PATTERN = re.compile(r'from\s+["\']([^"\'])["\']')
REQUIRE_PATTERN = re.compile(r'require\s*\(\s*["\']([^"\']+)["\']\s*\)')
def parse(self, file_path: Path) -> ParsedFile:
module_name = self.extract_module_name(file_path)
dependencies: List[Dependency] = []
try:
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
except (UnicodeDecodeError, OSError) as e:
return ParsedFile(
file_path=file_path,
module_name=module_name,
dependencies=[],
file_type="javascript"
)
lines = content.split('\n')
for line_num, line in enumerate(lines, 1):
line = line.strip()
if not line or line.startswith('//'):
continue
for pattern in self.IMPORT_PATTERNS:
match = pattern.match(line)
if match:
import_path = match.group(1)
if not import_path.startswith('.') and not import_path.startswith('/'):
dep = Dependency(
module_name=import_path,
file_path=file_path,
line_number=line_num
)
dependencies.append(dep)
break
return ParsedFile(
file_path=file_path,
module_name=module_name,
dependencies=dependencies,
file_type="javascript"
)
def extract_module_name(self, file_path: Path) -> str:
return file_path.stem