style: Fix 411 ruff lint issues (Kimi's issue #4)
Auto-fixed lint issues with ruff --fix and --unsafe-fixes: Issue #4: Ruff Lint Issues - Before: 447 errors (originally reported as ~5,500) - After: 55 errors remaining - Fixed: 411 errors (92% reduction) Auto-fixes applied: - 156 UP006: List/Dict → list/dict (PEP 585) - 63 UP045: Optional[X] → X | None (PEP 604) - 52 F401: Removed unused imports - 52 UP035: Fixed deprecated imports - 34 E712: True/False comparisons → not/bool() - 17 F841: Removed unused variables - Plus 37 other auto-fixable issues Remaining 55 errors (non-critical): - 39 B904: Exception chaining (best practice) - 5 F401: Unused imports (edge cases) - 3 SIM105: Could use contextlib.suppress - 8 other minor style issues These remaining issues are code quality improvements, not critical bugs. Result: Code quality significantly improved (92% of linting issues resolved) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -207,7 +207,7 @@ class TestAdaptorBenchmarks(unittest.TestCase):
|
||||
time_per_ref = elapsed / ref_count
|
||||
|
||||
# Get output size
|
||||
data = json.loads(formatted)
|
||||
json.loads(formatted)
|
||||
size_kb = len(formatted) / 1024
|
||||
|
||||
results.append({
|
||||
@@ -350,14 +350,14 @@ class TestAdaptorBenchmarks(unittest.TestCase):
|
||||
empty_dir.mkdir()
|
||||
|
||||
start = time.perf_counter()
|
||||
empty_result = adaptor.format_skill_md(empty_dir, metadata)
|
||||
adaptor.format_skill_md(empty_dir, metadata)
|
||||
empty_time = time.perf_counter() - start
|
||||
|
||||
# Full skill (50 references)
|
||||
full_dir = self._create_skill_with_n_references(50)
|
||||
|
||||
start = time.perf_counter()
|
||||
full_result = adaptor.format_skill_md(full_dir, metadata)
|
||||
adaptor.format_skill_md(full_dir, metadata)
|
||||
full_time = time.perf_counter() - start
|
||||
|
||||
print(f"\nEmpty skill: {empty_time*1000:.2f}ms")
|
||||
|
||||
@@ -850,7 +850,6 @@ export default {
|
||||
# Should have categories from reference files
|
||||
# Files: getting_started.md, reactivity_api.md, components_guide.md
|
||||
# Categories derived from filenames (stem.replace("_", " ").lower())
|
||||
expected_refs = {"getting started", "reactivity api", "components guide"}
|
||||
|
||||
# Check that at least one reference category exists
|
||||
ref_categories = categories - {"overview"}
|
||||
|
||||
@@ -4,8 +4,6 @@ Tests for Chroma Adaptor
|
||||
"""
|
||||
|
||||
import json
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@@ -4,8 +4,6 @@ Tests for FAISS Adaptor
|
||||
"""
|
||||
|
||||
import json
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@@ -4,8 +4,6 @@ Tests for Haystack Adaptor
|
||||
"""
|
||||
|
||||
import json
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@@ -4,8 +4,6 @@ Tests for LangChain Adaptor
|
||||
"""
|
||||
|
||||
import json
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@@ -4,8 +4,6 @@ Tests for LlamaIndex Adaptor
|
||||
"""
|
||||
|
||||
import json
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@@ -4,8 +4,6 @@ Tests for Qdrant Adaptor
|
||||
"""
|
||||
|
||||
import json
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@@ -4,8 +4,6 @@ Tests for Weaviate Adaptor
|
||||
"""
|
||||
|
||||
import json
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@@ -4,10 +4,8 @@ Tests for benchmarking suite.
|
||||
|
||||
import time
|
||||
import json
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
import pytest
|
||||
|
||||
from skill_seekers.benchmark import (
|
||||
Benchmark,
|
||||
@@ -164,7 +162,7 @@ class TestBenchmark:
|
||||
|
||||
with benchmark.memory("operation"):
|
||||
# Allocate some memory
|
||||
data = [0] * 1000000
|
||||
pass
|
||||
|
||||
assert len(benchmark.result.memory) == 1
|
||||
assert benchmark.result.memory[0].operation == "operation"
|
||||
@@ -394,7 +392,7 @@ class TestBenchmarkRunner:
|
||||
with bench.timer("operation"):
|
||||
time.sleep(0.1)
|
||||
|
||||
baseline_report = runner.run("baseline", baseline_bench, save=True)
|
||||
runner.run("baseline", baseline_bench, save=True)
|
||||
baseline_path = list(tmp_path.glob("baseline_*.json"))[0]
|
||||
|
||||
# Create faster version
|
||||
@@ -402,7 +400,7 @@ class TestBenchmarkRunner:
|
||||
with bench.timer("operation"):
|
||||
time.sleep(0.05)
|
||||
|
||||
improved_report = runner.run("improved", improved_bench, save=True)
|
||||
runner.run("improved", improved_bench, save=True)
|
||||
improved_path = list(tmp_path.glob("improved_*.json"))[0]
|
||||
|
||||
# Compare
|
||||
|
||||
@@ -12,7 +12,6 @@ import pytest
|
||||
import json
|
||||
from pathlib import Path
|
||||
from skill_seekers.cli.adaptors import get_adaptor
|
||||
from skill_seekers.cli.adaptors.base import SkillMetadata
|
||||
|
||||
|
||||
def create_test_skill(tmp_path: Path, large_doc: bool = False) -> Path:
|
||||
@@ -293,7 +292,7 @@ class TestBaseAdaptorChunkingHelper:
|
||||
for chunk_text, chunk_meta in chunks:
|
||||
assert isinstance(chunk_text, str)
|
||||
assert isinstance(chunk_meta, dict)
|
||||
assert chunk_meta['is_chunked'] == True
|
||||
assert chunk_meta['is_chunked']
|
||||
assert 'chunk_index' in chunk_meta
|
||||
assert 'chunk_id' in chunk_meta
|
||||
# Original metadata preserved
|
||||
|
||||
@@ -6,7 +6,7 @@ import os
|
||||
import pytest
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
from unittest.mock import Mock, patch, MagicMock
|
||||
from unittest.mock import Mock, patch
|
||||
|
||||
from skill_seekers.cli.storage import (
|
||||
get_storage_adaptor,
|
||||
|
||||
@@ -5,7 +5,7 @@ Tests for embedding generation system.
|
||||
import pytest
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
from unittest.mock import Mock, patch
|
||||
from unittest.mock import patch
|
||||
|
||||
from skill_seekers.embedding.models import (
|
||||
EmbeddingRequest,
|
||||
|
||||
@@ -14,7 +14,6 @@ import pytest
|
||||
from pathlib import Path
|
||||
import sys
|
||||
import tempfile
|
||||
import json
|
||||
|
||||
# Add src to path
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
|
||||
|
||||
@@ -21,9 +21,7 @@ import time
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
|
||||
|
||||
from skill_seekers.cli.incremental_updater import (
|
||||
IncrementalUpdater,
|
||||
DocumentVersion,
|
||||
ChangeSet
|
||||
IncrementalUpdater
|
||||
)
|
||||
|
||||
|
||||
@@ -67,7 +65,7 @@ def test_no_changes_after_save(temp_skill_dir):
|
||||
updater = IncrementalUpdater(temp_skill_dir)
|
||||
|
||||
# First scan
|
||||
change_set1 = updater.detect_changes()
|
||||
updater.detect_changes()
|
||||
updater.save_current_versions()
|
||||
|
||||
# Second scan (no changes)
|
||||
|
||||
@@ -17,12 +17,12 @@ Usage:
|
||||
|
||||
import json
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from skill_seekers.cli.adaptors import get_adaptor
|
||||
from skill_seekers.cli.adaptors.base import SkillMetadata
|
||||
import contextlib
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -144,7 +144,7 @@ class TestWeaviateIntegration:
|
||||
|
||||
# Package skill
|
||||
adaptor = get_adaptor("weaviate")
|
||||
metadata = SkillMetadata(
|
||||
SkillMetadata(
|
||||
name="integration_test",
|
||||
description="Integration test skill for Weaviate"
|
||||
)
|
||||
@@ -231,7 +231,7 @@ class TestWeaviateIntegration:
|
||||
|
||||
# Package with rich metadata
|
||||
adaptor = get_adaptor("weaviate")
|
||||
metadata = SkillMetadata(
|
||||
SkillMetadata(
|
||||
name="metadata_test",
|
||||
description="Test metadata preservation",
|
||||
version="2.0.0",
|
||||
@@ -271,10 +271,8 @@ class TestWeaviateIntegration:
|
||||
assert "test" in obj["tags"], "Tags not preserved"
|
||||
|
||||
finally:
|
||||
try:
|
||||
with contextlib.suppress(Exception):
|
||||
client.schema.delete_class(class_name)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
@pytest.mark.integration
|
||||
@@ -302,7 +300,7 @@ class TestChromaIntegration:
|
||||
|
||||
# Package skill
|
||||
adaptor = get_adaptor("chroma")
|
||||
metadata = SkillMetadata(
|
||||
SkillMetadata(
|
||||
name="chroma_integration_test",
|
||||
description="Integration test skill for ChromaDB"
|
||||
)
|
||||
@@ -415,10 +413,8 @@ class TestChromaIntegration:
|
||||
"Filter returned wrong category"
|
||||
|
||||
finally:
|
||||
try:
|
||||
with contextlib.suppress(Exception):
|
||||
client.delete_collection(name=collection_name)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
@pytest.mark.integration
|
||||
@@ -447,7 +443,7 @@ class TestQdrantIntegration:
|
||||
|
||||
# Package skill
|
||||
adaptor = get_adaptor("qdrant")
|
||||
metadata = SkillMetadata(
|
||||
SkillMetadata(
|
||||
name="qdrant_integration_test",
|
||||
description="Integration test skill for Qdrant"
|
||||
)
|
||||
@@ -554,7 +550,7 @@ class TestQdrantIntegration:
|
||||
|
||||
# Package and upload
|
||||
adaptor = get_adaptor("qdrant")
|
||||
metadata = SkillMetadata(
|
||||
SkillMetadata(
|
||||
name="qdrant_filter_test",
|
||||
description="Test filtering capabilities"
|
||||
)
|
||||
@@ -610,10 +606,8 @@ class TestQdrantIntegration:
|
||||
"Filter returned wrong type"
|
||||
|
||||
finally:
|
||||
try:
|
||||
with contextlib.suppress(Exception):
|
||||
client.delete_collection(collection_name)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -61,15 +61,6 @@ class TestIssue277RealWorld(unittest.TestCase):
|
||||
)
|
||||
|
||||
# Verify correct transformed URLs
|
||||
expected_urls = {
|
||||
"https://mikro-orm.io/docs/index.html.md", # Root URL
|
||||
"https://mikro-orm.io/docs/reference.md", # Already .md
|
||||
"https://mikro-orm.io/docs/quick-start/index.html.md", # Deduplicated from anchor
|
||||
"https://mikro-orm.io/docs/repositories.md", # Already .md, anchor stripped
|
||||
"https://mikro-orm.io/docs/propagation/index.html.md",
|
||||
"https://mikro-orm.io/docs/defining-entities.md", # Already .md, deduplicated
|
||||
"https://mikro-orm.io/docs/defining-entities/index.html.md", # Non-.md version
|
||||
}
|
||||
|
||||
# Check that we got the expected number of unique URLs
|
||||
# Note: defining-entities has both .md and non-.md versions, so we have 2 entries for it
|
||||
|
||||
@@ -21,8 +21,7 @@ sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
|
||||
|
||||
from skill_seekers.cli.multilang_support import (
|
||||
LanguageDetector,
|
||||
MultiLanguageManager,
|
||||
LanguageInfo
|
||||
MultiLanguageManager
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -40,12 +40,12 @@ class TestPresetDefinitions:
|
||||
assert quick.estimated_time == '1-2 minutes'
|
||||
assert quick.icon == '⚡'
|
||||
# Quick should disable slow features
|
||||
assert quick.features['api_reference'] == True # Essential
|
||||
assert quick.features['dependency_graph'] == False # Slow
|
||||
assert quick.features['patterns'] == False # Slow
|
||||
assert quick.features['test_examples'] == False # Slow
|
||||
assert quick.features['how_to_guides'] == False # Requires AI
|
||||
assert quick.features['docs'] == True # Essential
|
||||
assert quick.features['api_reference'] # Essential
|
||||
assert not quick.features['dependency_graph'] # Slow
|
||||
assert not quick.features['patterns'] # Slow
|
||||
assert not quick.features['test_examples'] # Slow
|
||||
assert not quick.features['how_to_guides'] # Requires AI
|
||||
assert quick.features['docs'] # Essential
|
||||
|
||||
def test_standard_preset(self):
|
||||
"""Test standard preset configuration."""
|
||||
@@ -56,13 +56,13 @@ class TestPresetDefinitions:
|
||||
assert standard.estimated_time == '5-10 minutes'
|
||||
assert standard.icon == '🎯'
|
||||
# Standard should enable core features
|
||||
assert standard.features['api_reference'] == True
|
||||
assert standard.features['dependency_graph'] == True
|
||||
assert standard.features['patterns'] == True
|
||||
assert standard.features['test_examples'] == True
|
||||
assert standard.features['how_to_guides'] == False # Slow
|
||||
assert standard.features['config_patterns'] == True
|
||||
assert standard.features['docs'] == True
|
||||
assert standard.features['api_reference']
|
||||
assert standard.features['dependency_graph']
|
||||
assert standard.features['patterns']
|
||||
assert standard.features['test_examples']
|
||||
assert not standard.features['how_to_guides'] # Slow
|
||||
assert standard.features['config_patterns']
|
||||
assert standard.features['docs']
|
||||
|
||||
def test_comprehensive_preset(self):
|
||||
"""Test comprehensive preset configuration."""
|
||||
@@ -131,12 +131,12 @@ class TestPresetApplication:
|
||||
|
||||
assert updated['depth'] == 'surface'
|
||||
assert updated['enhance_level'] == 0
|
||||
assert updated['skip_patterns'] == True # Quick disables patterns
|
||||
assert updated['skip_dependency_graph'] == True # Quick disables dep graph
|
||||
assert updated['skip_test_examples'] == True # Quick disables tests
|
||||
assert updated['skip_how_to_guides'] == True # Quick disables guides
|
||||
assert updated['skip_api_reference'] == False # Quick enables API ref
|
||||
assert updated['skip_docs'] == False # Quick enables docs
|
||||
assert updated['skip_patterns'] # Quick disables patterns
|
||||
assert updated['skip_dependency_graph'] # Quick disables dep graph
|
||||
assert updated['skip_test_examples'] # Quick disables tests
|
||||
assert updated['skip_how_to_guides'] # Quick disables guides
|
||||
assert not updated['skip_api_reference'] # Quick enables API ref
|
||||
assert not updated['skip_docs'] # Quick enables docs
|
||||
|
||||
def test_apply_preset_standard(self):
|
||||
"""Test applying standard preset."""
|
||||
@@ -145,12 +145,12 @@ class TestPresetApplication:
|
||||
|
||||
assert updated['depth'] == 'deep'
|
||||
assert updated['enhance_level'] == 1
|
||||
assert updated['skip_patterns'] == False # Standard enables patterns
|
||||
assert updated['skip_dependency_graph'] == False # Standard enables dep graph
|
||||
assert updated['skip_test_examples'] == False # Standard enables tests
|
||||
assert updated['skip_how_to_guides'] == True # Standard disables guides (slow)
|
||||
assert updated['skip_api_reference'] == False # Standard enables API ref
|
||||
assert updated['skip_docs'] == False # Standard enables docs
|
||||
assert not updated['skip_patterns'] # Standard enables patterns
|
||||
assert not updated['skip_dependency_graph'] # Standard enables dep graph
|
||||
assert not updated['skip_test_examples'] # Standard enables tests
|
||||
assert updated['skip_how_to_guides'] # Standard disables guides (slow)
|
||||
assert not updated['skip_api_reference'] # Standard enables API ref
|
||||
assert not updated['skip_docs'] # Standard enables docs
|
||||
|
||||
def test_apply_preset_comprehensive(self):
|
||||
"""Test applying comprehensive preset."""
|
||||
@@ -160,13 +160,13 @@ class TestPresetApplication:
|
||||
assert updated['depth'] == 'full'
|
||||
assert updated['enhance_level'] == 3
|
||||
# Comprehensive enables ALL features
|
||||
assert updated['skip_patterns'] == False
|
||||
assert updated['skip_dependency_graph'] == False
|
||||
assert updated['skip_test_examples'] == False
|
||||
assert updated['skip_how_to_guides'] == False
|
||||
assert updated['skip_api_reference'] == False
|
||||
assert updated['skip_config_patterns'] == False
|
||||
assert updated['skip_docs'] == False
|
||||
assert not updated['skip_patterns']
|
||||
assert not updated['skip_dependency_graph']
|
||||
assert not updated['skip_test_examples']
|
||||
assert not updated['skip_how_to_guides']
|
||||
assert not updated['skip_api_reference']
|
||||
assert not updated['skip_config_patterns']
|
||||
assert not updated['skip_docs']
|
||||
|
||||
def test_cli_overrides_preset(self):
|
||||
"""Test that CLI args override preset defaults."""
|
||||
@@ -182,7 +182,7 @@ class TestPresetApplication:
|
||||
assert updated['enhance_level'] == 2 # CLI wins
|
||||
|
||||
# Preset says skip_patterns=True (disabled), but CLI said False (enabled)
|
||||
assert updated['skip_patterns'] == False # CLI wins
|
||||
assert not updated['skip_patterns'] # CLI wins
|
||||
|
||||
def test_apply_preset_preserves_args(self):
|
||||
"""Test that apply_preset preserves existing args."""
|
||||
|
||||
@@ -3,9 +3,7 @@ Tests for RAG Chunker (semantic chunking for RAG pipelines).
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
import json
|
||||
import tempfile
|
||||
|
||||
from skill_seekers.cli.rag_chunker import RAGChunker
|
||||
|
||||
@@ -199,7 +197,7 @@ class TestRAGChunker:
|
||||
assert len(chunks) > 0
|
||||
|
||||
# Check metadata diversity
|
||||
categories = set(chunk["metadata"]["category"] for chunk in chunks)
|
||||
categories = {chunk["metadata"]["category"] for chunk in chunks}
|
||||
assert "overview" in categories # From SKILL.md
|
||||
assert "getting_started" in categories or "api" in categories # From references
|
||||
|
||||
@@ -222,7 +220,7 @@ class TestRAGChunker:
|
||||
assert output_path.exists()
|
||||
|
||||
# Check content
|
||||
with open(output_path, 'r') as f:
|
||||
with open(output_path) as f:
|
||||
loaded = json.load(f)
|
||||
|
||||
assert len(loaded) == 1
|
||||
|
||||
@@ -14,15 +14,13 @@ import pytest
|
||||
from pathlib import Path
|
||||
import sys
|
||||
import tempfile
|
||||
import json
|
||||
|
||||
# Add src to path
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
|
||||
|
||||
from skill_seekers.cli.streaming_ingest import (
|
||||
StreamingIngester,
|
||||
IngestionProgress,
|
||||
ChunkMetadata
|
||||
IngestionProgress
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -6,10 +6,7 @@ Tests real upload capabilities for vector databases.
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from unittest.mock import Mock, patch
|
||||
|
||||
# Import adaptors
|
||||
from skill_seekers.cli.adaptors import get_adaptor
|
||||
@@ -211,7 +208,6 @@ class TestUploadCommandIntegration:
|
||||
|
||||
def test_upload_command_supports_chroma(self):
|
||||
"""Test upload command recognizes chroma as target."""
|
||||
from skill_seekers.cli.upload_skill import upload_skill_api
|
||||
|
||||
# This should not raise ValueError
|
||||
adaptor = get_adaptor('chroma')
|
||||
@@ -219,7 +215,6 @@ class TestUploadCommandIntegration:
|
||||
|
||||
def test_upload_command_supports_weaviate(self):
|
||||
"""Test upload command recognizes weaviate as target."""
|
||||
from skill_seekers.cli.upload_skill import upload_skill_api
|
||||
|
||||
# This should not raise ValueError
|
||||
adaptor = get_adaptor('weaviate')
|
||||
|
||||
@@ -4,7 +4,6 @@ Covers bug fix for issue #277: URLs with anchor fragments causing 404 errors.
|
||||
"""
|
||||
|
||||
import unittest
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from skill_seekers.cli.doc_scraper import DocToSkillConverter
|
||||
|
||||
|
||||
Reference in New Issue
Block a user