Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/readmex/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -1115,6 +1115,8 @@ def _generate_readme_content(
raise ValueError(f"Output directory is None at line {1060}")

relative_logo_path = os.path.relpath(logo_path, self.output_dir)
# Convert Windows backslashes to forward slashes for web compatibility
relative_logo_path = relative_logo_path.replace('\\', '/')
self.console.print(f"[cyan]DEBUG: Relative logo path = {relative_logo_path}[/cyan]")

# 替换整个logo img标签,使用新的属性
Expand Down Expand Up @@ -1427,6 +1429,8 @@ def _generate_debug_readme_content(self, structure, dependencies, descriptions,
raise ValueError(f"Output directory is None at line {1315} (debug mode)")

relative_logo_path = os.path.relpath(logo_path, self.output_dir)
# Convert Windows backslashes to forward slashes for web compatibility
relative_logo_path = relative_logo_path.replace('\\', '/')
self.console.print(f"[cyan]DEBUG (debug mode): Relative logo path = {relative_logo_path}[/cyan]")

# 替换整个logo img标签,使用新的属性
Expand Down
61 changes: 52 additions & 9 deletions src/readmex/utils/dependency_analyzer.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import os
import re
import json
import glob
from typing import Set, List, Dict, Any
from pathlib import Path
from rich.console import Console
Expand Down Expand Up @@ -170,18 +171,36 @@ def _get_existing_dependencies(self) -> str:
existing_content = ""

for dep_file in lang_config["dependency_files"]:
dep_path = os.path.join(self.project_dir, dep_file)
if os.path.exists(dep_path):
try:
with open(dep_path, "r", encoding="utf-8") as f:
content = f.read()
if content.strip():
existing_content += f"\n=== {dep_file} ===\n{content}\n"
except Exception as e:
self.console.print(f"[yellow]Warning: Could not read {dep_file}: {e}[/yellow]")
# Handle glob patterns like *.csproj
if "*" in dep_file:
# Use glob to find matching files
pattern = os.path.join(self.project_dir, dep_file).replace("\\", "/")
matching_files = glob.glob(pattern)
for file_path in matching_files:
content = self._read_dependency_file(file_path, os.path.basename(file_path))
if content:
existing_content += content
else:
# Handle regular file names
dep_path = os.path.join(self.project_dir, dep_file)
if os.path.exists(dep_path):
content = self._read_dependency_file(dep_path, dep_file)
if content:
existing_content += content

return existing_content.strip()

def _read_dependency_file(self, file_path: str, display_name: str) -> str:
"""Helper method to read a dependency file and return its content"""
try:
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
if content.strip():
return f"\n=== {display_name} ===\n{content}\n"
except Exception as e:
self.console.print(f"[yellow]Warning: Could not read {display_name}: {e}[/yellow]")
return ""

def _extract_imports_by_language(self, content: str) -> Set[str]:
"""Extract import statements using language-specific patterns"""
lang_config = self.config["languages"][self.primary_language]
Expand Down Expand Up @@ -293,6 +312,30 @@ def _save_dependency_files(

# Determine output filename based on language
primary_dep_file = lang_config["dependency_files"][0]

# Handle glob patterns in primary dependency file
if "*" in primary_dep_file:
# For glob patterns, try to find an existing file or create a generic name
pattern = os.path.join(self.project_dir, primary_dep_file).replace("\\", "/")
existing_files = glob.glob(pattern)

if existing_files:
# Use the name of the first existing file
primary_dep_file = os.path.basename(existing_files[0])
else:
# Create a generic filename based on the pattern
if primary_dep_file == "*.csproj":
primary_dep_file = "Project.csproj"
elif primary_dep_file == "*.sln":
primary_dep_file = "Solution.sln"
elif primary_dep_file == "*.gemspec":
primary_dep_file = "gemfile.gemspec"
elif primary_dep_file == "*.prj":
primary_dep_file = "project.prj"
else:
# Generic fallback: replace * with "project"
primary_dep_file = primary_dep_file.replace("*", "project")

output_dep_path = os.path.join(output_dir, primary_dep_file)

# Save generated dependency file
Expand Down