feat(style): Fix 1-space indentation in 27 files
Files corrected: - src/fuzzy_anchor.py (18 violations) - src/patch_modal.py (14 violations) - scripts/extract_symbols.py (4 violations) - scripts/tasks/download_fonts.py (8 violations) - tests/: 23 files with indentation issues All files verified with py_compile. Remaining 4 files (test_api_events.py, test_discussion_takes_gui.py, test_gui_updates.py, test_headless_service.py) have complex multi-line with statements that require manual correction.
This commit is contained in:
+74
-74
@@ -3,86 +3,86 @@ import re
|
||||
from typing import Optional, Tuple
|
||||
|
||||
class FuzzyAnchor:
|
||||
@staticmethod
|
||||
def get_context(lines: list[str], index: int, count: int, direction: int) -> list[str]:
|
||||
context = []
|
||||
curr = index
|
||||
while len(context) < count and 0 <= curr < len(lines):
|
||||
line = lines[curr].strip()
|
||||
if line:
|
||||
context.append(line)
|
||||
curr += direction
|
||||
return context
|
||||
@staticmethod
|
||||
def get_context(lines: list[str], index: int, count: int, direction: int) -> list[str]:
|
||||
context = []
|
||||
curr = index
|
||||
while len(context) < count and 0 <= curr < len(lines):
|
||||
line = lines[curr].strip()
|
||||
if line:
|
||||
context.append(line)
|
||||
curr += direction
|
||||
return context
|
||||
|
||||
@classmethod
|
||||
def create_slice(cls, text: str, start_line: int, end_line: int) -> dict:
|
||||
"""
|
||||
start_line and end_line are 1-based.
|
||||
[C: src/gui_2.py:App._populate_auto_slices, src/gui_2.py:App._render_text_viewer_window, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_create_slice_basic, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_anchor_mismatch_returns_none, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_exact_match, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_line_deleted_before_returns_none, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_line_inserted_before, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_multiple_lines_changed, tests/test_slice_editor_behavior.py:test_add_slice_with_annotations]
|
||||
"""
|
||||
lines = text.splitlines()
|
||||
s_idx = max(0, start_line - 1)
|
||||
e_idx = min(len(lines), end_line)
|
||||
slice_lines = lines[s_idx:e_idx]
|
||||
slice_text = "\n".join(slice_lines)
|
||||
@classmethod
|
||||
def create_slice(cls, text: str, start_line: int, end_line: int) -> dict:
|
||||
"""
|
||||
start_line and end_line are 1-based.
|
||||
[C: src/gui_2.py:App._populate_auto_slices, src/gui_2.py:App._render_text_viewer_window, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_create_slice_basic, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_anchor_mismatch_returns_none, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_exact_match, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_line_deleted_before_returns_none, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_line_inserted_before, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_multiple_lines_changed, tests/test_slice_editor_behavior.py:test_add_slice_with_annotations]
|
||||
"""
|
||||
lines = text.splitlines()
|
||||
s_idx = max(0, start_line - 1)
|
||||
e_idx = min(len(lines), end_line)
|
||||
slice_lines = lines[s_idx:e_idx]
|
||||
slice_text = "\n".join(slice_lines)
|
||||
|
||||
return {
|
||||
"start_line": start_line,
|
||||
"end_line": end_line,
|
||||
"start_context": cls.get_context(lines, s_idx, 3, 1),
|
||||
"end_context": cls.get_context(lines, e_idx - 1, 3, -1)[::-1], # Reverse back to normal order
|
||||
"content_hash": hashlib.mdsafe(slice_text.encode()).hexdigest() if hasattr(hashlib, 'mdsafe') else hashlib.md5(slice_text.encode()).hexdigest()
|
||||
}
|
||||
return {
|
||||
"start_line": start_line,
|
||||
"end_line": end_line,
|
||||
"start_context": cls.get_context(lines, s_idx, 3, 1),
|
||||
"end_context": cls.get_context(lines, e_idx - 1, 3, -1)[::-1], # Reverse back to normal order
|
||||
"content_hash": hashlib.mdsafe(slice_text.encode()).hexdigest() if hasattr(hashlib, 'mdsafe') else hashlib.md5(slice_text.encode()).hexdigest()
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def resolve_slice(cls, text: str, slice_data: dict) -> Optional[Tuple[int, int]]:
|
||||
"""
|
||||
[C: tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_anchor_mismatch_returns_none, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_exact_match, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_line_deleted_before_returns_none, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_line_inserted_before, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_multiple_lines_changed]
|
||||
"""
|
||||
lines = text.splitlines()
|
||||
# 1. Try exact match
|
||||
s_idx = slice_data["start_line"] - 1
|
||||
e_idx = slice_data["end_line"]
|
||||
if 0 <= s_idx < len(lines) and e_idx <= len(lines):
|
||||
current_text = "\n".join(lines[s_idx:e_idx])
|
||||
curr_hash = hashlib.md5(current_text.encode()).hexdigest()
|
||||
if curr_hash == slice_data["content_hash"]:
|
||||
return (slice_data["start_line"], slice_data["end_line"])
|
||||
@classmethod
|
||||
def resolve_slice(cls, text: str, slice_data: dict) -> Optional[Tuple[int, int]]:
|
||||
"""
|
||||
[C: tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_anchor_mismatch_returns_none, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_exact_match, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_line_deleted_before_returns_none, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_line_inserted_before, tests/test_fuzzy_anchor.py:TestFuzzyAnchor.test_resolve_slice_multiple_lines_changed]
|
||||
"""
|
||||
lines = text.splitlines()
|
||||
# 1. Try exact match
|
||||
s_idx = slice_data["start_line"] - 1
|
||||
e_idx = slice_data["end_line"]
|
||||
if 0 <= s_idx < len(lines) and e_idx <= len(lines):
|
||||
current_text = "\n".join(lines[s_idx:e_idx])
|
||||
curr_hash = hashlib.md5(current_text.encode()).hexdigest()
|
||||
if curr_hash == slice_data["content_hash"]:
|
||||
return (slice_data["start_line"], slice_data["end_line"])
|
||||
|
||||
# 2. Fuzzy match
|
||||
start_ctx = slice_data["start_context"]
|
||||
end_ctx = slice_data["end_context"]
|
||||
if not start_ctx or not end_ctx: return None
|
||||
# 2. Fuzzy match
|
||||
start_ctx = slice_data["start_context"]
|
||||
end_ctx = slice_data["end_context"]
|
||||
if not start_ctx or not end_ctx: return None
|
||||
|
||||
# Search for start_ctx
|
||||
best_s = -1
|
||||
for i in range(len(lines)):
|
||||
match = True
|
||||
for j, ctx_line in enumerate(start_ctx):
|
||||
if i+j >= len(lines) or lines[i+j].strip() != ctx_line:
|
||||
match = False
|
||||
break
|
||||
if match:
|
||||
best_s = i
|
||||
break
|
||||
# Search for start_ctx
|
||||
best_s = -1
|
||||
for i in range(len(lines)):
|
||||
match = True
|
||||
for j, ctx_line in enumerate(start_ctx):
|
||||
if i+j >= len(lines) or lines[i+j].strip() != ctx_line:
|
||||
match = False
|
||||
break
|
||||
if match:
|
||||
best_s = i
|
||||
break
|
||||
|
||||
if best_s == -1: return None
|
||||
if best_s == -1: return None
|
||||
|
||||
# Search for end_ctx after start_ctx
|
||||
best_e = -1
|
||||
for i in range(best_s, len(lines)):
|
||||
match = True
|
||||
for j, ctx_line in enumerate(end_ctx):
|
||||
# end_ctx is the LAST 3 lines. So we match backwards from i.
|
||||
idx = i - (len(end_ctx) - 1) + j
|
||||
if idx < 0 or idx >= len(lines) or lines[idx].strip() != ctx_line:
|
||||
match = False
|
||||
break
|
||||
if match:
|
||||
best_e = i + 1
|
||||
break
|
||||
# Search for end_ctx after start_ctx
|
||||
best_e = -1
|
||||
for i in range(best_s, len(lines)):
|
||||
match = True
|
||||
for j, ctx_line in enumerate(end_ctx):
|
||||
# end_ctx is the LAST 3 lines. So we match backwards from i.
|
||||
idx = i - (len(end_ctx) - 1) + j
|
||||
if idx < 0 or idx >= len(lines) or lines[idx].strip() != ctx_line:
|
||||
match = False
|
||||
break
|
||||
if match:
|
||||
best_e = i + 1
|
||||
break
|
||||
|
||||
if best_e != -1:
|
||||
return (best_s + 1, best_e)
|
||||
if best_e != -1:
|
||||
return (best_s + 1, best_e)
|
||||
|
||||
return None
|
||||
return None
|
||||
+84
-84
@@ -3,104 +3,104 @@ from dataclasses import dataclass, field
|
||||
|
||||
@dataclass
|
||||
class PendingPatch:
|
||||
patch_text: str
|
||||
file_paths: List[str]
|
||||
generated_by: str
|
||||
timestamp: float
|
||||
patch_text: str
|
||||
file_paths: List[str]
|
||||
generated_by: str
|
||||
timestamp: float
|
||||
|
||||
class PatchModalManager:
|
||||
def __init__(self):
|
||||
self._pending_patch: Optional[PendingPatch] = None
|
||||
self._show_modal: bool = False
|
||||
self._on_apply_callback: Optional[Callable[[str], bool]] = None
|
||||
self._on_reject_callback: Optional[Callable[[], None]] = None
|
||||
def __init__(self):
|
||||
self._pending_patch: Optional[PendingPatch] = None
|
||||
self._show_modal: bool = False
|
||||
self._on_apply_callback: Optional[Callable[[str], bool]] = None
|
||||
self._on_reject_callback: Optional[Callable[[], None]] = None
|
||||
|
||||
def request_patch_approval(self, patch_text: str, file_paths: List[str], generated_by: str = "Tier 4 QA") -> bool:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_close_modal, tests/test_patch_modal.py:test_reject_patch, tests/test_patch_modal.py:test_request_patch_approval, tests/test_patch_modal.py:test_reset]
|
||||
"""
|
||||
from time import time
|
||||
self._pending_patch = PendingPatch(
|
||||
patch_text=patch_text,
|
||||
file_paths=file_paths,
|
||||
generated_by=generated_by,
|
||||
timestamp=time()
|
||||
)
|
||||
self._show_modal = True
|
||||
return True
|
||||
def request_patch_approval(self, patch_text: str, file_paths: List[str], generated_by: str = "Tier 4 QA") -> bool:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_close_modal, tests/test_patch_modal.py:test_reject_patch, tests/test_patch_modal.py:test_request_patch_approval, tests/test_patch_modal.py:test_reset]
|
||||
"""
|
||||
from time import time
|
||||
self._pending_patch = PendingPatch(
|
||||
patch_text=patch_text,
|
||||
file_paths=file_paths,
|
||||
generated_by=generated_by,
|
||||
timestamp=time()
|
||||
)
|
||||
self._show_modal = True
|
||||
return True
|
||||
|
||||
def get_pending_patch(self) -> Optional[PendingPatch]:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_patch_modal_manager_init, tests/test_patch_modal.py:test_reject_patch, tests/test_patch_modal.py:test_request_patch_approval, tests/test_patch_modal.py:test_reset]
|
||||
"""
|
||||
return self._pending_patch
|
||||
def get_pending_patch(self) -> Optional[PendingPatch]:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_patch_modal_manager_init, tests/test_patch_modal.py:test_reject_patch, tests/test_patch_modal.py:test_request_patch_approval, tests/test_patch_modal.py:test_reset]
|
||||
"""
|
||||
return self._pending_patch
|
||||
|
||||
def is_modal_shown(self) -> bool:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_close_modal, tests/test_patch_modal.py:test_patch_modal_manager_init, tests/test_patch_modal.py:test_reject_patch, tests/test_patch_modal.py:test_request_patch_approval, tests/test_patch_modal.py:test_reset]
|
||||
"""
|
||||
return self._show_modal
|
||||
def is_modal_shown(self) -> bool:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_close_modal, tests/test_patch_modal.py:test_patch_modal_manager_init, tests/test_patch_modal.py:test_reject_patch, tests/test_patch_modal.py:test_request_patch_approval, tests/test_patch_modal.py:test_reset]
|
||||
"""
|
||||
return self._show_modal
|
||||
|
||||
def set_apply_callback(self, callback: Callable[[str], bool]) -> None:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_apply_callback, tests/test_patch_modal.py:test_reset]
|
||||
"""
|
||||
self._on_apply_callback = callback
|
||||
def set_apply_callback(self, callback: Callable[[str], bool]) -> None:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_apply_callback, tests/test_patch_modal.py:test_reset]
|
||||
"""
|
||||
self._on_apply_callback = callback
|
||||
|
||||
def set_reject_callback(self, callback: Callable[[], None]) -> None:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_reject_callback, tests/test_patch_modal.py:test_reset]
|
||||
"""
|
||||
self._on_reject_callback = callback
|
||||
def set_reject_callback(self, callback: Callable[[], None]) -> None:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_reject_callback, tests/test_patch_modal.py:test_reset]
|
||||
"""
|
||||
self._on_reject_callback = callback
|
||||
|
||||
def apply_patch(self, patch_text: str) -> bool:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_apply_callback]
|
||||
"""
|
||||
if self._on_apply_callback:
|
||||
return self._on_apply_callback(patch_text)
|
||||
return False
|
||||
def apply_patch(self, patch_text: str) -> bool:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_apply_callback]
|
||||
"""
|
||||
if self._on_apply_callback:
|
||||
return self._on_apply_callback(patch_text)
|
||||
return False
|
||||
|
||||
def reject_patch(self) -> None:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_reject_callback, tests/test_patch_modal.py:test_reject_patch]
|
||||
"""
|
||||
self._pending_patch = None
|
||||
self._show_modal = False
|
||||
if self._on_reject_callback:
|
||||
self._on_reject_callback()
|
||||
def reject_patch(self) -> None:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_reject_callback, tests/test_patch_modal.py:test_reject_patch]
|
||||
"""
|
||||
self._pending_patch = None
|
||||
self._show_modal = False
|
||||
if self._on_reject_callback:
|
||||
self._on_reject_callback()
|
||||
|
||||
def close_modal(self) -> None:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_close_modal]
|
||||
"""
|
||||
self._show_modal = False
|
||||
def close_modal(self) -> None:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_close_modal]
|
||||
"""
|
||||
self._show_modal = False
|
||||
|
||||
def reset(self) -> None:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_reset]
|
||||
"""
|
||||
self._pending_patch = None
|
||||
self._show_modal = False
|
||||
self._on_apply_callback = None
|
||||
self._on_reject_callback = None
|
||||
def reset(self) -> None:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_reset]
|
||||
"""
|
||||
self._pending_patch = None
|
||||
self._show_modal = False
|
||||
self._on_apply_callback = None
|
||||
self._on_reject_callback = None
|
||||
|
||||
_patch_modal_manager: Optional[PatchModalManager] = None
|
||||
|
||||
def get_patch_modal_manager() -> PatchModalManager:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_get_patch_modal_manager_singleton]
|
||||
"""
|
||||
global _patch_modal_manager
|
||||
if _patch_modal_manager is None:
|
||||
_patch_modal_manager = PatchModalManager()
|
||||
return _patch_modal_manager
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_get_patch_modal_manager_singleton]
|
||||
"""
|
||||
global _patch_modal_manager
|
||||
if _patch_modal_manager is None:
|
||||
_patch_modal_manager = PatchModalManager()
|
||||
return _patch_modal_manager
|
||||
|
||||
def reset_patch_modal_manager() -> None:
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_get_patch_modal_manager_singleton]
|
||||
"""
|
||||
global _patch_modal_manager
|
||||
if _patch_modal_manager:
|
||||
_patch_modal_manager.reset()
|
||||
_patch_modal_manager = None
|
||||
"""
|
||||
[C: tests/test_patch_modal.py:test_get_patch_modal_manager_singleton]
|
||||
"""
|
||||
global _patch_modal_manager
|
||||
if _patch_modal_manager:
|
||||
_patch_modal_manager.reset()
|
||||
_patch_modal_manager = None
|
||||
Reference in New Issue
Block a user