fix: improve AI comment detection accuracy in FileWatcher

This commit is contained in:
Paul Gauthier 2024-12-01 15:26:45 -08:00 committed by Paul Gauthier (aider)
parent ee7bb71a05
commit 97bf5e8d69
4 changed files with 47 additions and 31 deletions

View file

@ -106,8 +106,8 @@ class FileWatcher:
# Check if file contains AI markers # Check if file contains AI markers
try: try:
_, _, has_match = self.get_ai_comments(str(path_abs)) comments, _, _ = self.get_ai_comments(str(path_abs))
return has_match return bool(comments)
except Exception: except Exception:
return return

View file

@ -23,15 +23,22 @@ def test_ai_comment_pattern():
# Test Python fixture # Test Python fixture
py_path = fixtures_dir / "watch.py" py_path = fixtures_dir / "watch.py"
py_lines, py_comments, py_has_bang = watcher.get_ai_comments(str(py_path)) py_lines, py_comments, py_has_bang = watcher.get_ai_comments(str(py_path))
# Count unique AI comments (excluding duplicates and variations with extra spaces) # Count unique AI comments (excluding duplicates and variations with extra spaces)
unique_py_comments = set(comment.strip().lower() for comment in py_comments) unique_py_comments = set(comment.strip().lower() for comment in py_comments)
assert len(unique_py_comments) == 11, f"Expected 11 unique AI comments in Python fixture, found {len(unique_py_comments)}"
py_expected = 10
assert len(unique_py_comments) == 10, (
f"Expected {py_expected} unique AI comments in Python fixture, found"
f" {len(unique_py_comments)}"
)
assert py_has_bang, "Expected at least one bang (!) comment in Python fixture" assert py_has_bang, "Expected at least one bang (!) comment in Python fixture"
# Test JavaScript fixture # Test JavaScript fixture
js_path = fixtures_dir / "watch.js" js_path = fixtures_dir / "watch.js"
js_lines, js_comments, js_has_bang = watcher.get_ai_comments(str(js_path)) js_lines, js_comments, js_has_bang = watcher.get_ai_comments(str(js_path))
js_expected = 14
assert ( assert (
len(js_lines) == 11 len(js_lines) == js_expected
), f"Expected 11 AI comments in JavaScript fixture, found {len(js_lines)}" ), f"Expected {js_expected} AI comments in JavaScript fixture, found {len(js_lines)}"
assert js_has_bang, "Expected at least one bang (!) comment in JavaScript fixture" assert js_has_bang, "Expected at least one bang (!) comment in JavaScript fixture"

View file

@ -1,27 +1,35 @@
// Regular AI comment // Regular AI comment
//ai do something //ai do 1 something
//AI make this better //AI make 2 this better
//ai! urgent change needed //ai! urgent 3 change needed
//AI! another urgent one //AI! another 4 urgent one
// ai with space // ai with 5 space
// AI with caps // AI with 6 caps
// ai! with bang // ai! with 7 bang
// this is not an ai comment // this is not an ai comment
// aider is not an ai comment // aider is not an ai! comment
function dummyFunction() { function dummyFunction() {
// ai inside function // ai inside 8 function
return true; return true;
} }
class Example { class Example {
constructor() { constructor() {
// ai in constructor // ai in 9 constructor
this.value = 42; this.value = 42;
} }
method() { method() {
// ai in method // ai in 10 method
return this.value; return this.value;
} }
// ai!
//ai
//ai!
// 11-13
method2() { // ai 14
return 1;
}
} }

View file

@ -1,19 +1,20 @@
# Regular AI comment # flake8: noqa
# ai do something
# AI make this better # Regular not AI comment
# ai! urgent change needed # ai 1 do something
# AI! another urgent one # AI 2 make this better
//ai javascript style # ai! 3 urgent change needed
//AI do that thing # AI! 4 another urgent one
//ai! urgent js thing
// ai with some space
// AI with caps
// ai! with bang
# this is not an ai comment # this is not an ai comment
// this is also not an ai comment
# aider is not an ai comment # aider is not an ai comment
// aider is not an ai comment # not an ai! comment
def dummy_function(): def dummy_function():
# ai inside function # ai inside 5 function
pass # final 6 ai!
# final 7 ai
# ai
# ai
# those are 8+9
pass # ai 10