fix: Resolve remaining 188 linting errors (249 total fixed)
Second batch of comprehensive linting fixes: Unused Arguments/Variables (136 errors): - ARG002/ARG001 (91 errors): Prefixed unused method/function arguments with '_' - Interface methods in adaptors (base.py, gemini.py, markdown.py) - AST analyzer methods maintaining signatures (code_analyzer.py) - Test fixtures and hooks (conftest.py) - Added noqa: ARG001/ARG002 for pytest hooks requiring exact names - F841 (45 errors): Prefixed unused local variables with '_' - Tuple unpacking where some values aren't needed - Variables assigned but not referenced Loop & Boolean Quality (28 errors): - B007 (18 errors): Prefixed unused loop control variables with '_' - enumerate() loops where index not used - for-in loops where loop variable not referenced - E712 (10 errors): Simplified boolean comparisons - Changed '== True' to direct boolean check - Changed '== False' to 'not' expression - Improved test readability Code Quality (24 errors): - SIM201 (4 errors): Already fixed in previous commit - SIM118 (2 errors): Already fixed in previous commit - E741 (4 errors): Already fixed in previous commit - Config manager loop variable fix (1 error) All Tests Passing: - test_scraper_features.py: 42 passed - test_integration.py: 51 passed - test_architecture_scenarios.py: 11 passed - test_real_world_fastmcp.py: 19 passed, 1 skipped Note: Some SIM errors (nested if, multiple with) remain unfixed as they would require non-trivial refactoring. Focus was on functional correctness. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -140,7 +140,7 @@ class SkillAdaptor(ABC):
|
||||
"""
|
||||
return False
|
||||
|
||||
def enhance(self, skill_dir: Path, api_key: str) -> bool:
|
||||
def enhance(self, _skill_dir: Path, _api_key: str) -> bool:
|
||||
"""
|
||||
Optionally enhance SKILL.md using platform's AI.
|
||||
|
||||
|
||||
@@ -154,7 +154,7 @@ See the references directory for complete documentation with examples and best p
|
||||
|
||||
return output_path
|
||||
|
||||
def upload(self, package_path: Path, api_key: str, **kwargs) -> dict[str, Any]:
|
||||
def upload(self, package_path: Path, api_key: str, **_kwargs) -> dict[str, Any]:
|
||||
"""
|
||||
Upload skill tar.gz to Gemini Files API.
|
||||
|
||||
|
||||
@@ -152,7 +152,7 @@ Browse the reference files for detailed information on each topic. All files are
|
||||
|
||||
return output_path
|
||||
|
||||
def upload(self, package_path: Path, api_key: str, **kwargs) -> dict[str, Any]:
|
||||
def upload(self, package_path: Path, _api_key: str, **_kwargs) -> dict[str, Any]:
|
||||
"""
|
||||
Generic markdown export does not support upload.
|
||||
|
||||
@@ -176,7 +176,7 @@ Browse the reference files for detailed information on each topic. All files are
|
||||
),
|
||||
}
|
||||
|
||||
def validate_api_key(self, api_key: str) -> bool:
|
||||
def validate_api_key(self, _api_key: str) -> bool:
|
||||
"""
|
||||
Markdown export doesn't use API keys.
|
||||
|
||||
@@ -206,7 +206,7 @@ Browse the reference files for detailed information on each topic. All files are
|
||||
"""
|
||||
return False
|
||||
|
||||
def enhance(self, skill_dir: Path, api_key: str) -> bool:
|
||||
def enhance(self, _skill_dir: Path, _api_key: str) -> bool:
|
||||
"""
|
||||
Markdown export doesn't support enhancement.
|
||||
|
||||
|
||||
@@ -181,7 +181,7 @@ class ArchitecturalPatternDetector:
|
||||
|
||||
return dict(structure)
|
||||
|
||||
def _detect_frameworks(self, directory: Path, files: list[dict]) -> list[str]:
|
||||
def _detect_frameworks(self, _directory: Path, files: list[dict]) -> list[str]:
|
||||
"""Detect frameworks being used"""
|
||||
detected = []
|
||||
|
||||
@@ -419,7 +419,7 @@ class ArchitecturalPatternDetector:
|
||||
return patterns
|
||||
|
||||
def _detect_layered_architecture(
|
||||
self, dirs: dict[str, int], files: list[dict]
|
||||
self, dirs: dict[str, int], _files: list[dict]
|
||||
) -> list[ArchitecturalPattern]:
|
||||
"""Detect Layered Architecture (3-tier, N-tier)"""
|
||||
patterns = []
|
||||
@@ -430,7 +430,7 @@ class ArchitecturalPatternDetector:
|
||||
return patterns
|
||||
|
||||
evidence = []
|
||||
components = defaultdict(list)
|
||||
_components = defaultdict(list)
|
||||
layers_found = []
|
||||
|
||||
if "presentation" in dirs or "ui" in dirs:
|
||||
@@ -461,7 +461,7 @@ class ArchitecturalPatternDetector:
|
||||
return patterns
|
||||
|
||||
def _detect_clean_architecture(
|
||||
self, dirs: dict[str, int], files: list[dict]
|
||||
self, dirs: dict[str, int], _files: list[dict]
|
||||
) -> list[ArchitecturalPattern]:
|
||||
"""Detect Clean Architecture"""
|
||||
patterns = []
|
||||
|
||||
@@ -256,7 +256,7 @@ class CodeAnalyzer:
|
||||
decorators=decorators,
|
||||
)
|
||||
|
||||
def _analyze_javascript(self, content: str, file_path: str) -> dict[str, Any]:
|
||||
def _analyze_javascript(self, content: str, _file_path: str) -> dict[str, Any]:
|
||||
"""
|
||||
Analyze JavaScript/TypeScript file using regex patterns.
|
||||
|
||||
@@ -407,7 +407,7 @@ class CodeAnalyzer:
|
||||
|
||||
return params
|
||||
|
||||
def _analyze_cpp(self, content: str, file_path: str) -> dict[str, Any]:
|
||||
def _analyze_cpp(self, content: str, _file_path: str) -> dict[str, Any]:
|
||||
"""
|
||||
Analyze C/C++ header file using regex patterns.
|
||||
|
||||
@@ -554,7 +554,7 @@ class CodeAnalyzer:
|
||||
# C++ uses the same comment syntax as JavaScript
|
||||
return self._extract_js_comments(content)
|
||||
|
||||
def _analyze_csharp(self, content: str, file_path: str) -> dict[str, Any]:
|
||||
def _analyze_csharp(self, content: str, _file_path: str) -> dict[str, Any]:
|
||||
"""
|
||||
Analyze C# file using regex patterns.
|
||||
|
||||
@@ -742,7 +742,7 @@ class CodeAnalyzer:
|
||||
|
||||
return comments
|
||||
|
||||
def _analyze_go(self, content: str, file_path: str) -> dict[str, Any]:
|
||||
def _analyze_go(self, content: str, _file_path: str) -> dict[str, Any]:
|
||||
"""
|
||||
Analyze Go file using regex patterns.
|
||||
|
||||
@@ -774,7 +774,7 @@ class CodeAnalyzer:
|
||||
# Matches: func [receiver] name(params) [returns]
|
||||
func_pattern = r"func\s+(?:\((\w+)\s+\*?(\w+)\)\s+)?(\w+)\s*\(([^)]*)\)(?:\s+\(([^)]+)\)|(?:\s+(\w+(?:\[.*?\])?(?:,\s*\w+)*)))?"
|
||||
for match in re.finditer(func_pattern, content):
|
||||
receiver_var = match.group(1)
|
||||
_receiver_var = match.group(1)
|
||||
receiver_type = match.group(2)
|
||||
func_name = match.group(3)
|
||||
params_str = match.group(4)
|
||||
@@ -851,7 +851,7 @@ class CodeAnalyzer:
|
||||
# Go uses C-style comments
|
||||
return self._extract_js_comments(content)
|
||||
|
||||
def _analyze_rust(self, content: str, file_path: str) -> dict[str, Any]:
|
||||
def _analyze_rust(self, content: str, _file_path: str) -> dict[str, Any]:
|
||||
"""
|
||||
Analyze Rust file using regex patterns.
|
||||
|
||||
@@ -969,7 +969,7 @@ class CodeAnalyzer:
|
||||
|
||||
return comments
|
||||
|
||||
def _analyze_java(self, content: str, file_path: str) -> dict[str, Any]:
|
||||
def _analyze_java(self, content: str, _file_path: str) -> dict[str, Any]:
|
||||
"""
|
||||
Analyze Java file using regex patterns.
|
||||
|
||||
@@ -1151,7 +1151,7 @@ class CodeAnalyzer:
|
||||
|
||||
return comments
|
||||
|
||||
def _analyze_ruby(self, content: str, file_path: str) -> dict[str, Any]:
|
||||
def _analyze_ruby(self, content: str, _file_path: str) -> dict[str, Any]:
|
||||
"""
|
||||
Analyze Ruby file using regex patterns.
|
||||
|
||||
@@ -1251,7 +1251,7 @@ class CodeAnalyzer:
|
||||
|
||||
return comments
|
||||
|
||||
def _analyze_php(self, content: str, file_path: str) -> dict[str, Any]:
|
||||
def _analyze_php(self, content: str, _file_path: str) -> dict[str, Any]:
|
||||
"""
|
||||
Analyze PHP file using regex patterns.
|
||||
|
||||
|
||||
@@ -336,7 +336,7 @@ Focus on actionable insights:
|
||||
"""
|
||||
return prompt
|
||||
|
||||
def _run_claude_cli(self, prompt_file: Path, output_file: Path) -> dict | None:
|
||||
def _run_claude_cli(self, prompt_file: Path, _output_file: Path) -> dict | None:
|
||||
"""Run Claude Code CLI and wait for completion"""
|
||||
try:
|
||||
# Run claude command
|
||||
|
||||
@@ -166,7 +166,7 @@ class ConfigManager:
|
||||
return profiles
|
||||
|
||||
def get_github_token(
|
||||
self, profile_name: str | None = None, repo_url: str | None = None
|
||||
self, profile_name: str | None = None, _repo_url: str | None = None
|
||||
) -> str | None:
|
||||
"""
|
||||
Get GitHub token with smart fallback chain.
|
||||
@@ -219,7 +219,7 @@ class ConfigManager:
|
||||
|
||||
# Find current profile index
|
||||
current_idx = None
|
||||
for idx, (name, profile) in enumerate(profiles):
|
||||
for idx, (_name, profile) in enumerate(profiles):
|
||||
if profile["token"] == current_token:
|
||||
current_idx = idx
|
||||
break
|
||||
|
||||
@@ -350,7 +350,7 @@ class DependencyAnalyzer:
|
||||
# Extract individual imports from block
|
||||
import_line_pattern = r'(?:(\w+)\s+)?"([^"]+)"'
|
||||
for line_match in re.finditer(import_line_pattern, block):
|
||||
alias = line_match.group(1)
|
||||
_alias = line_match.group(1)
|
||||
package = line_match.group(2)
|
||||
line_num = content[: block_start + line_match.start()].count("\n") + 1
|
||||
|
||||
@@ -609,7 +609,7 @@ class DependencyAnalyzer:
|
||||
return self.graph
|
||||
|
||||
def _resolve_import(
|
||||
self, source_file: str, imported_module: str, is_relative: bool
|
||||
self, _source_file: str, imported_module: str, _is_relative: bool
|
||||
) -> str | None:
|
||||
"""
|
||||
Resolve import statement to actual file path.
|
||||
|
||||
@@ -544,7 +544,7 @@ class DocToSkillConverter:
|
||||
return lang # Return string for backward compatibility
|
||||
|
||||
def extract_patterns(
|
||||
self, main: Any, code_samples: list[dict[str, Any]]
|
||||
self, main: Any, _code_samples: list[dict[str, Any]]
|
||||
) -> list[dict[str, str]]:
|
||||
"""Extract common coding patterns (NEW FEATURE)"""
|
||||
patterns = []
|
||||
@@ -881,7 +881,7 @@ class DocToSkillConverter:
|
||||
# Save ALL variants to references/
|
||||
os.makedirs(os.path.join(self.skill_dir, "references"), exist_ok=True)
|
||||
|
||||
for variant, data in downloaded.items():
|
||||
for _variant, data in downloaded.items():
|
||||
filepath = os.path.join(self.skill_dir, "references", data["filename"])
|
||||
with open(filepath, "w", encoding="utf-8") as f:
|
||||
f.write(data["content"])
|
||||
|
||||
@@ -133,7 +133,7 @@ class LocalSkillEnhancer:
|
||||
Summarized content
|
||||
"""
|
||||
lines = content.split("\n")
|
||||
target_lines = int(len(lines) * target_ratio)
|
||||
_target_lines = int(len(lines) * target_ratio)
|
||||
|
||||
# Priority 1: Keep introduction (first 20%)
|
||||
intro_lines = int(len(lines) * 0.2)
|
||||
@@ -165,7 +165,7 @@ class LocalSkillEnhancer:
|
||||
result = result_lines.copy()
|
||||
|
||||
# Add code blocks first (prioritize code examples)
|
||||
for idx, block in code_blocks[:5]: # Max 5 code blocks
|
||||
for _idx, block in code_blocks[:5]: # Max 5 code blocks
|
||||
result.append("") # Add blank line before code block
|
||||
result.extend(block)
|
||||
|
||||
@@ -222,7 +222,7 @@ class LocalSkillEnhancer:
|
||||
print()
|
||||
|
||||
# Summarize each reference
|
||||
for filename, metadata in references.items():
|
||||
for _filename, metadata in references.items():
|
||||
summarized = self.summarize_reference(metadata["content"], summarization_ratio)
|
||||
metadata["content"] = summarized
|
||||
metadata["size"] = len(summarized)
|
||||
|
||||
@@ -146,7 +146,7 @@ class RouterGenerator:
|
||||
|
||||
return routing
|
||||
|
||||
def _extract_skill_specific_labels(self, skill_name: str, skill_keywords: set) -> list[str]:
|
||||
def _extract_skill_specific_labels(self, _skill_name: str, skill_keywords: set) -> list[str]:
|
||||
"""
|
||||
Extract labels from GitHub issues that match this specific skill.
|
||||
|
||||
@@ -198,7 +198,7 @@ class RouterGenerator:
|
||||
|
||||
return list(matching_labels)
|
||||
|
||||
def _generate_frontmatter(self, routing_keywords: dict[str, list[str]]) -> str:
|
||||
def _generate_frontmatter(self, _routing_keywords: dict[str, list[str]]) -> str:
|
||||
"""
|
||||
Generate YAML frontmatter compliant with agentskills.io spec.
|
||||
|
||||
@@ -924,7 +924,7 @@ Simply ask your question and mention the topic. The router will find the right s
|
||||
|
||||
return skill_md
|
||||
|
||||
def generate_subskill_issues_section(self, skill_name: str, topics: list[str]) -> str:
|
||||
def generate_subskill_issues_section(self, _skill_name: str, topics: list[str]) -> str:
|
||||
"""
|
||||
Generate "Common Issues" section for a sub-skill (Phase 4).
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ def extract_description_from_readme(readme_content: str, repo_name: str) -> str:
|
||||
meaningful_paragraph = None
|
||||
in_code_block = False
|
||||
|
||||
for i, line in enumerate(lines):
|
||||
for _i, line in enumerate(lines):
|
||||
stripped = line.strip()
|
||||
|
||||
# Track code blocks
|
||||
|
||||
@@ -240,7 +240,7 @@ class WorkflowAnalyzer:
|
||||
|
||||
return steps
|
||||
|
||||
def _extract_steps_heuristic(self, code: str, workflow: dict) -> list[WorkflowStep]:
|
||||
def _extract_steps_heuristic(self, code: str, _workflow: dict) -> list[WorkflowStep]:
|
||||
"""Extract steps using heuristics (for non-Python or invalid syntax)"""
|
||||
steps = []
|
||||
lines = code.split("\n")
|
||||
@@ -377,7 +377,7 @@ class WorkflowAnalyzer:
|
||||
has_mock = "mock" in code.lower() or "patch" in code.lower()
|
||||
has_error_handling = "try" in code or "except" in code
|
||||
|
||||
complexity_score = workflow.get("complexity_score", 0.5)
|
||||
_complexity_score = workflow.get("complexity_score", 0.5)
|
||||
|
||||
# Determine level
|
||||
if num_steps <= 3 and not has_async and not has_mock:
|
||||
@@ -957,7 +957,7 @@ class HowToGuideBuilder:
|
||||
|
||||
return guide
|
||||
|
||||
def _generate_overview(self, primary_workflow: dict, all_workflows: list[dict]) -> str:
|
||||
def _generate_overview(self, primary_workflow: dict, _all_workflows: list[dict]) -> str:
|
||||
"""Generate guide overview"""
|
||||
# Try to get explanation from AI analysis
|
||||
if primary_workflow.get("ai_analysis"):
|
||||
@@ -973,7 +973,7 @@ class HowToGuideBuilder:
|
||||
# Final fallback
|
||||
return f"Learn how to use {primary_workflow.get('test_name', 'this feature')} in your code."
|
||||
|
||||
def _enhance_guide_with_ai(self, guide: HowToGuide, ai_analysis: dict, enhancer):
|
||||
def _enhance_guide_with_ai(self, guide: HowToGuide, _ai_analysis: dict, enhancer):
|
||||
"""
|
||||
Comprehensively enhance guide with AI using GuideEnhancer.
|
||||
|
||||
|
||||
@@ -259,7 +259,7 @@ def install_to_agent(
|
||||
)
|
||||
|
||||
# Copy skill directory
|
||||
def ignore_files(directory, files):
|
||||
def ignore_files(_directory, files):
|
||||
"""Filter function for shutil.copytree to exclude unwanted files."""
|
||||
ignored = []
|
||||
for f in files:
|
||||
|
||||
@@ -107,7 +107,7 @@ class BasePatternDetector:
|
||||
self.pattern_type = "BasePattern"
|
||||
self.category = "Unknown"
|
||||
|
||||
def detect_surface(self, class_sig, all_classes: list) -> PatternInstance | None:
|
||||
def detect_surface(self, _class_sig, _all_classes: list) -> PatternInstance | None:
|
||||
"""
|
||||
Surface-level detection using naming conventions.
|
||||
|
||||
@@ -121,7 +121,7 @@ class BasePatternDetector:
|
||||
# Default: no surface detection
|
||||
return None
|
||||
|
||||
def detect_deep(self, class_sig, all_classes: list) -> PatternInstance | None:
|
||||
def detect_deep(self, _class_sig, _all_classes: list) -> PatternInstance | None:
|
||||
"""
|
||||
Deep detection using structural analysis.
|
||||
|
||||
@@ -136,7 +136,7 @@ class BasePatternDetector:
|
||||
return None
|
||||
|
||||
def detect_full(
|
||||
self, class_sig, all_classes: list, file_content: str
|
||||
self, _class_sig, _all_classes: list, _file_content: str
|
||||
) -> PatternInstance | None:
|
||||
"""
|
||||
Full detection using behavioral analysis.
|
||||
@@ -385,7 +385,7 @@ class SingletonDetector(BasePatternDetector):
|
||||
self.pattern_type = "Singleton"
|
||||
self.category = "Creational"
|
||||
|
||||
def detect_surface(self, class_sig, all_classes: list) -> PatternInstance | None:
|
||||
def detect_surface(self, class_sig, _all_classes: list) -> PatternInstance | None:
|
||||
"""Check if class name suggests Singleton"""
|
||||
if "singleton" in class_sig.name.lower():
|
||||
return PatternInstance(
|
||||
@@ -519,7 +519,7 @@ class FactoryDetector(BasePatternDetector):
|
||||
self.pattern_type = "Factory"
|
||||
self.category = "Creational"
|
||||
|
||||
def detect_surface(self, class_sig, all_classes: list) -> PatternInstance | None:
|
||||
def detect_surface(self, class_sig, _all_classes: list) -> PatternInstance | None:
|
||||
"""Check naming conventions for Factory"""
|
||||
# Check class name
|
||||
if "factory" in class_sig.name.lower():
|
||||
@@ -626,7 +626,7 @@ class ObserverDetector(BasePatternDetector):
|
||||
self.pattern_type = "Observer"
|
||||
self.category = "Behavioral"
|
||||
|
||||
def detect_surface(self, class_sig, all_classes: list) -> PatternInstance | None:
|
||||
def detect_surface(self, class_sig, _all_classes: list) -> PatternInstance | None:
|
||||
"""Check naming for Observer pattern"""
|
||||
observer_keywords = ["observer", "listener", "subscriber", "watcher"]
|
||||
|
||||
@@ -749,7 +749,7 @@ class StrategyDetector(BasePatternDetector):
|
||||
self.pattern_type = "Strategy"
|
||||
self.category = "Behavioral"
|
||||
|
||||
def detect_surface(self, class_sig, all_classes: list) -> PatternInstance | None:
|
||||
def detect_surface(self, class_sig, _all_classes: list) -> PatternInstance | None:
|
||||
"""Check naming for Strategy"""
|
||||
strategy_keywords = ["strategy", "policy", "algorithm"]
|
||||
|
||||
@@ -852,7 +852,7 @@ class DecoratorDetector(BasePatternDetector):
|
||||
self.pattern_type = "Decorator"
|
||||
self.category = "Structural"
|
||||
|
||||
def detect_surface(self, class_sig, all_classes: list) -> PatternInstance | None:
|
||||
def detect_surface(self, class_sig, _all_classes: list) -> PatternInstance | None:
|
||||
"""Check naming for Decorator"""
|
||||
decorator_keywords = ["decorator", "wrapper", "proxy"]
|
||||
|
||||
@@ -965,7 +965,7 @@ class BuilderDetector(BasePatternDetector):
|
||||
self.pattern_type = "Builder"
|
||||
self.category = "Creational"
|
||||
|
||||
def detect_surface(self, class_sig, all_classes: list) -> PatternInstance | None:
|
||||
def detect_surface(self, class_sig, _all_classes: list) -> PatternInstance | None:
|
||||
"""Check naming for Builder"""
|
||||
if "builder" in class_sig.name.lower():
|
||||
return PatternInstance(
|
||||
@@ -1096,7 +1096,7 @@ class AdapterDetector(BasePatternDetector):
|
||||
self.pattern_type = "Adapter"
|
||||
self.category = "Structural"
|
||||
|
||||
def detect_surface(self, class_sig, all_classes: list) -> PatternInstance | None:
|
||||
def detect_surface(self, class_sig, _all_classes: list) -> PatternInstance | None:
|
||||
"""Check naming for Adapter"""
|
||||
adapter_keywords = ["adapter", "wrapper", "bridge"]
|
||||
|
||||
@@ -1182,7 +1182,7 @@ class CommandDetector(BasePatternDetector):
|
||||
self.pattern_type = "Command"
|
||||
self.category = "Behavioral"
|
||||
|
||||
def detect_surface(self, class_sig, all_classes: list) -> PatternInstance | None:
|
||||
def detect_surface(self, class_sig, _all_classes: list) -> PatternInstance | None:
|
||||
"""Check naming for Command"""
|
||||
command_keywords = ["command", "action", "task", "operation"]
|
||||
|
||||
@@ -1389,7 +1389,7 @@ class ChainOfResponsibilityDetector(BasePatternDetector):
|
||||
self.pattern_type = "ChainOfResponsibility"
|
||||
self.category = "Behavioral"
|
||||
|
||||
def detect_surface(self, class_sig, all_classes: list) -> PatternInstance | None:
|
||||
def detect_surface(self, class_sig, _all_classes: list) -> PatternInstance | None:
|
||||
"""Check naming for Chain of Responsibility"""
|
||||
chain_keywords = ["handler", "chain", "middleware", "filter", "processor"]
|
||||
|
||||
|
||||
@@ -203,7 +203,7 @@ class PDFToSkillConverter:
|
||||
categorized["content"] = {"title": "Content", "pages": self.extracted_data["pages"]}
|
||||
|
||||
print(f"✅ Created {len(categorized)} categories")
|
||||
for cat_key, cat_data in categorized.items():
|
||||
for _cat_key, cat_data in categorized.items():
|
||||
print(f" - {cat_data['title']}: {len(cat_data['pages'])} pages")
|
||||
|
||||
return categorized
|
||||
@@ -339,7 +339,7 @@ class PDFToSkillConverter:
|
||||
total_pages = self.extracted_data.get("total_pages", 0)
|
||||
f.write(f"**Total Pages:** {total_pages}\n\n")
|
||||
f.write("**Content Breakdown:**\n\n")
|
||||
for cat_key, cat_data in categorized.items():
|
||||
for _cat_key, cat_data in categorized.items():
|
||||
page_count = len(cat_data["pages"])
|
||||
f.write(f"- **{cat_data['title']}**: {page_count} pages\n")
|
||||
f.write("\n")
|
||||
@@ -421,7 +421,7 @@ class PDFToSkillConverter:
|
||||
# Navigation
|
||||
f.write("## 🗺️ Navigation\n\n")
|
||||
f.write("**Reference Files:**\n\n")
|
||||
for cat_key, cat_data in categorized.items():
|
||||
for _cat_key, cat_data in categorized.items():
|
||||
cat_file = self._sanitize_filename(cat_data["title"])
|
||||
f.write(f"- `references/{cat_file}.md` - {cat_data['title']}\n")
|
||||
f.write("\n")
|
||||
@@ -477,7 +477,7 @@ class PDFToSkillConverter:
|
||||
|
||||
# Simple pattern extraction from headings and emphasized text
|
||||
for page in self.extracted_data.get("pages", []):
|
||||
text = page.get("text", "")
|
||||
_text = page.get("text", "")
|
||||
headings = page.get("headings", [])
|
||||
|
||||
# Look for common pattern keywords in headings
|
||||
|
||||
@@ -180,7 +180,7 @@ class SkillQualityChecker:
|
||||
}
|
||||
|
||||
code_blocks = len(enhancement_indicators["code_examples"].findall(content))
|
||||
real_examples = len(enhancement_indicators["real_examples"].findall(content))
|
||||
_real_examples = len(enhancement_indicators["real_examples"].findall(content))
|
||||
sections = len(enhancement_indicators["sections"].findall(content))
|
||||
|
||||
# Quality thresholds
|
||||
|
||||
@@ -73,7 +73,7 @@ def resume_job(job_id: str):
|
||||
|
||||
# Extract job details
|
||||
command = progress.get("command", "")
|
||||
job_config = progress.get("config", {})
|
||||
_job_config = progress.get("config", {})
|
||||
checkpoint = progress.get("progress", {}).get("last_checkpoint")
|
||||
|
||||
print(f"Original command: {command}")
|
||||
|
||||
@@ -142,7 +142,7 @@ def test_config_validation_errors():
|
||||
print("\n✓ Testing invalid source type...")
|
||||
try:
|
||||
# validate_config() calls .validate() automatically
|
||||
validator = validate_config(config_path)
|
||||
_validator = validate_config(config_path)
|
||||
assert False, "Should have raised error for invalid source type"
|
||||
except ValueError as e:
|
||||
assert "Invalid" in str(e) or "invalid" in str(e)
|
||||
|
||||
@@ -605,7 +605,7 @@ class UnifiedScraper:
|
||||
|
||||
try:
|
||||
# Run full C3.x analysis
|
||||
results = analyze_codebase(
|
||||
_results = analyze_codebase(
|
||||
directory=Path(local_repo_path),
|
||||
output_dir=temp_output,
|
||||
depth="deep",
|
||||
|
||||
@@ -222,7 +222,7 @@ class UnifiedSkillBuilder:
|
||||
github_sections = self._parse_skill_md_sections(skill_mds.get("github", ""))
|
||||
|
||||
# Extract GitHub metadata from full content
|
||||
github_full = skill_mds.get("github", "")
|
||||
_github_full = skill_mds.get("github", "")
|
||||
|
||||
# Start with YAML frontmatter
|
||||
skill_name = self.name.lower().replace("_", "-").replace(" ", "-")[:64]
|
||||
@@ -688,28 +688,28 @@ This skill combines knowledge from multiple sources:
|
||||
if matched:
|
||||
content += "### ✅ Verified APIs\n\n"
|
||||
content += "*Documentation and code agree*\n\n"
|
||||
for api_name, api_data in list(matched.items())[:10]: # Limit to first 10
|
||||
for _api_name, api_data in list(matched.items())[:10]: # Limit to first 10
|
||||
content += self._format_api_entry(api_data, inline_conflict=False)
|
||||
|
||||
# Show conflicting APIs with warnings
|
||||
if conflicts:
|
||||
content += "\n### ⚠️ APIs with Conflicts\n\n"
|
||||
content += "*Documentation and code differ*\n\n"
|
||||
for api_name, api_data in list(conflicts.items())[:10]:
|
||||
for _api_name, api_data in list(conflicts.items())[:10]:
|
||||
content += self._format_api_entry(api_data, inline_conflict=True)
|
||||
|
||||
# Show undocumented APIs
|
||||
if code_only:
|
||||
content += "\n### 💻 Undocumented APIs\n\n"
|
||||
content += f"*Found in code but not in documentation ({len(code_only)} total)*\n\n"
|
||||
for api_name, api_data in list(code_only.items())[:5]:
|
||||
for _api_name, api_data in list(code_only.items())[:5]:
|
||||
content += self._format_api_entry(api_data, inline_conflict=False)
|
||||
|
||||
# Show removed/missing APIs
|
||||
if docs_only:
|
||||
content += "\n### 📖 Documentation-Only APIs\n\n"
|
||||
content += f"*Documented but not found in code ({len(docs_only)} total)*\n\n"
|
||||
for api_name, api_data in list(docs_only.items())[:5]:
|
||||
for _api_name, api_data in list(docs_only.items())[:5]:
|
||||
content += self._format_api_entry(api_data, inline_conflict=False)
|
||||
|
||||
content += "\n*See references/api/ for complete API documentation*\n"
|
||||
|
||||
@@ -197,7 +197,7 @@ class AgentDetector:
|
||||
|
||||
return json.dumps(config, indent=2)
|
||||
|
||||
def _generate_intellij_config(self, server_command: str, http_port: int) -> str:
|
||||
def _generate_intellij_config(self, _server_command: str, http_port: int) -> str:
|
||||
"""
|
||||
Generate IntelliJ IDEA MCP configuration (XML format).
|
||||
|
||||
|
||||
@@ -944,7 +944,7 @@ async def upload_skill_tool(args: dict) -> list[TextContent]:
|
||||
return [TextContent(type="text", text=f"{output}\n\n❌ Error:\n{stderr}")]
|
||||
|
||||
|
||||
async def list_configs_tool(args: dict) -> list[TextContent]:
|
||||
async def list_configs_tool(_args: dict) -> list[TextContent]:
|
||||
"""List available configs"""
|
||||
configs_dir = Path("configs")
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ Note: Default selectors may need adjustment for your documentation site.
|
||||
return [TextContent(type="text", text=result)]
|
||||
|
||||
|
||||
async def list_configs(args: dict) -> list[TextContent]:
|
||||
async def list_configs(_args: dict) -> list[TextContent]:
|
||||
"""
|
||||
List all available preset configurations.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user