Add package manager parsers (npm, pip, go, cargo)
Some checks failed
CI / test (push) Has been cancelled
Some checks failed
CI / test (push) Has been cancelled
This commit is contained in:
60
src/depcheck/parsers/npm.py
Normal file
60
src/depcheck/parsers/npm.py
Normal file
@@ -0,0 +1,60 @@
|
||||
"""NPM package.json parser."""
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from depcheck.models import Dependency, PackageManager
|
||||
from depcheck.parsers import Parser
|
||||
from depcheck.utils import parse_version_string
|
||||
|
||||
|
||||
class NpmParser(Parser):
|
||||
"""Parser for npm package.json files."""
|
||||
|
||||
package_manager = PackageManager.NPM
|
||||
|
||||
def supports_file(self, file_path: Path) -> bool:
|
||||
return file_path.name == "package.json"
|
||||
|
||||
def get_file_patterns(self) -> list[str]:
|
||||
return ["package.json"]
|
||||
|
||||
def parse(self, file_path: Path) -> list[Dependency]:
|
||||
dependencies: list[Dependency] = []
|
||||
|
||||
try:
|
||||
content = file_path.read_text()
|
||||
data = json.loads(content)
|
||||
except (json.JSONDecodeError, OSError):
|
||||
return dependencies
|
||||
|
||||
sections = [
|
||||
("dependencies", "dependencies"),
|
||||
("devDependencies", "devDependencies"),
|
||||
("optionalDependencies", "optionalDependencies"),
|
||||
]
|
||||
|
||||
for section_key, category in sections:
|
||||
section = data.get(section_key, {})
|
||||
if not isinstance(section, dict):
|
||||
continue
|
||||
|
||||
for name, version_info in section.items():
|
||||
if isinstance(version_info, dict):
|
||||
version = version_info.get("version", "")
|
||||
else:
|
||||
version = str(version_info)
|
||||
|
||||
version = parse_version_string(version)
|
||||
if version:
|
||||
dependencies.append(
|
||||
Dependency(
|
||||
name=name,
|
||||
current_version=version,
|
||||
package_manager=self.package_manager,
|
||||
category=category,
|
||||
source_file=str(file_path),
|
||||
)
|
||||
)
|
||||
|
||||
return dependencies
|
||||
Reference in New Issue
Block a user