branch: elpa/aidermacs
commit b63a8d168a4a2f2aa1bfa5beedd009eb9e3d31d8
Author: Kang Tu <[email protected]>
Commit: GitHub <[email protected]>
Feat: Enhance aider-implement-todo (#61)
* feat: Add aider-implement-todo function to implement TODOs in current
context
* feat: Add `aider-implement-todo` function description to README
* docs(readme): update aider command description
* refactor: Add comment line detection to aider-implement-todo for more
precise implementation context
* fix: improve prompt clarity for comment implementation
* docs(aider-implement-todo): clarify cursor-on-comment behavior
* feat: update default AI models list and order in config
---------
Co-authored-by: Kang Tu <[email protected]>
---
README.org | 9 ++++++---
aider.el | 21 +++++++++++++++------
2 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/README.org b/README.org
index 5f36d15971..9544b60b1a 100644
--- a/README.org
+++ b/README.org
@@ -28,11 +28,11 @@ When being called with the universal argument (`C-u`), a
prompt will offer the u
*** Model Selection:
- (`aider-change-model`): Interactively select and change AI model in
current aider session
- Customize `aider-popular-models` to define your preferred models list.
Default models are (as date of 2025-01-26):
- - gemini/gemini-exp-1206 (free)
- anthropic/claude-3-5-sonnet-20241022 (really good in practical)
+ - gpt-4o-mini
+ - gemini/gemini-exp-1206 (free)
- r1 (performance matches o1, price << claude sonnet. weakness: small
context)
- deepseek/deepseek-chat (chatgpt-4o level performance, price is 1/100.
weakness: small context)
- - gpt-4o-mini
*** More ways to add files to the Aider buffer:
- use "@" in the menu to toggle add file between read-write mode and
read-only mode
@@ -43,7 +43,10 @@ When being called with the universal argument (`C-u`), a
prompt will offer the u
*** Write code:
- (`aider-function-or-region-refactor`): If a region is selected, ask Aider
to refactor the selected region. Otherwise, ask Aider to change / refactor the
function under the cursor.
- - (`aider-implement-todo`): Implement TODO comments in current context. If
cursor is inside a function, implement TODOs for that function. Otherwise
implement TODOs for the entire current file.
+ - (`aider-implement-todo`): Implement TODO comments in current context.
+ - If cursor is on a comment line, implement that specific comment.
+ - If cursor is inside a function, implement TODOs for that function.
+ - Otherwise implement TODOs for the entire current file.
*** Explain code:
- (`aider-ask-question`): Ask Aider a question about the code in the current
context. If a region is selected, use the region as context.
diff --git a/aider.el b/aider.el
index 2f26ee6951..a94004ae94 100644
--- a/aider.el
+++ b/aider.el
@@ -27,7 +27,7 @@
:type 'string
:group 'aider)
-(defcustom aider-args '("--model" "gemini/gemini-exp-1206")
+(defcustom aider-args '("--model" "anthropic/claude-3-5-sonnet-20241022")
"Arguments to pass to the Aider command."
:type '(repeat string)
:group 'aider)
@@ -624,18 +624,27 @@ This function assumes the cursor is on or inside a test
function."
;;;###autoload
(defun aider-implement-todo ()
"Implement TODO comments in current context.
+If cursor is on a comment line, implement that specific comment.
If cursor is inside a function, implement TODOs for that function.
Otherwise implement TODOs for the entire current file."
(interactive)
(if (not buffer-file-name)
(message "Current buffer is not visiting a file.")
- (let* ((function-name (which-function))
+ (let* ((current-line (string-trim (thing-at-point 'line t)))
+ (is-comment (and comment-start
+ (string-prefix-p comment-start (string-trim-left
current-line))))
+ (function-name (which-function))
(initial-input
- (if function-name
- (format "Please implement the TODO items in function '%s'.
Keep the existing code structure and only implement the TODOs in comments."
- function-name)
+ (cond
+ (is-comment
+ (format "Please implement this comment: '%s'. It is already
inside current code. Please do in-place implementation. Keep the existing code
structure and implement just this specific comment."
+ current-line))
+ (function-name
+ (format "Please implement the TODO items in function '%s'. Keep
the existing code structure and only implement the TODOs in comments."
+ function-name))
+ (t
(format "Please implement all TODO items in file '%s'. Keep the
existing code structure and only implement the TODOs in comments."
- (file-name-nondirectory buffer-file-name))))
+ (file-name-nondirectory buffer-file-name)))))
(user-command (aider-read-string "TODO implementation instruction:
" initial-input))
(command (format "/architect %s" user-command)))
(aider-add-current-file)