Major improvements to the event-driven prompt processing system: Function Completion: - Override intent to "complete" when prompt is inside function/method scope - Use Tree-sitter to detect enclosing scope and replace entire function - Special LLM prompt instructs to complete function body without duplicating - Patch apply uses "replace" strategy for scope range instead of appending Apply Delay: - Add `apply_delay_ms` config option (default 5000ms) for code review time - Log "Code ready. Applying in X seconds..." before applying patches - Configurable wait time before removing tags and injecting code VimLeavePre Cleanup: - Logs panel and queue windows close automatically on Neovim exit - Context modal closes on VimLeavePre - Scheduler stops timer and cleans up augroup on exit - Handle QuitPre for :qa, :wqa commands - Force close with buffer deletion for robust cleanup Response Cleaning: - Remove LLM special tokens (deepseek, llama markers) - Add blank line spacing before appended code - Log full raw LLM response in logs panel for debugging Documentation: - Add required dependencies (plenary.nvim, nvim-treesitter) - Add optional dependencies (nvim-treesitter-textobjects, nui.nvim) - Document all intent types including "complete" - Add Logs Panel section with features and keymaps - Update lazy.nvim example with dependencies Tests: - Add tests for patch create_from_event with different strategies - Fix assert.is_true to assert.is_truthy for string.match Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
86 lines
2.1 KiB
Lua
86 lines
2.1 KiB
Lua
---@mod codetyper Codetyper.nvim - AI-powered coding partner
|
|
---@brief [[
|
|
--- Codetyper.nvim is a Neovim plugin that acts as your coding partner.
|
|
--- It uses LLM APIs (Claude, OpenAI, Gemini, Copilot, Ollama) to help you
|
|
--- write code faster using special `.coder.*` files and inline prompt tags.
|
|
--- Features an event-driven scheduler with confidence scoring and
|
|
--- completion-aware injection timing.
|
|
---@brief ]]
|
|
|
|
local M = {}
|
|
|
|
---@type CoderConfig
|
|
M.config = {}
|
|
|
|
---@type boolean
|
|
M._initialized = false
|
|
|
|
--- Setup the plugin with user configuration
|
|
---@param opts? CoderConfig User configuration options
|
|
function M.setup(opts)
|
|
if M._initialized then
|
|
return
|
|
end
|
|
|
|
local config = require("codetyper.config")
|
|
M.config = config.setup(opts)
|
|
|
|
-- Initialize modules
|
|
local commands = require("codetyper.commands")
|
|
local gitignore = require("codetyper.gitignore")
|
|
local autocmds = require("codetyper.autocmds")
|
|
local tree = require("codetyper.tree")
|
|
local completion = require("codetyper.completion")
|
|
local logs_panel = require("codetyper.logs_panel")
|
|
|
|
-- Register commands
|
|
commands.setup()
|
|
|
|
-- Setup autocommands
|
|
autocmds.setup()
|
|
|
|
-- Setup file reference completion
|
|
completion.setup()
|
|
|
|
-- Setup logs panel (handles VimLeavePre cleanup)
|
|
logs_panel.setup()
|
|
|
|
-- Ensure .gitignore has coder files excluded
|
|
gitignore.ensure_ignored()
|
|
|
|
-- Initialize tree logging (creates .coder folder and initial tree.log)
|
|
tree.setup()
|
|
|
|
-- Start the event-driven scheduler if enabled
|
|
if M.config.scheduler and M.config.scheduler.enabled then
|
|
local scheduler = require("codetyper.agent.scheduler")
|
|
scheduler.start(M.config.scheduler)
|
|
end
|
|
|
|
M._initialized = true
|
|
|
|
-- Auto-open Ask panel after a short delay (to let UI settle)
|
|
if M.config.auto_open_ask then
|
|
vim.defer_fn(function()
|
|
local ask = require("codetyper.ask")
|
|
if not ask.is_open() then
|
|
ask.open()
|
|
end
|
|
end, 300)
|
|
end
|
|
end
|
|
|
|
--- Get current configuration
|
|
---@return CoderConfig
|
|
function M.get_config()
|
|
return M.config
|
|
end
|
|
|
|
--- Check if plugin is initialized
|
|
---@return boolean
|
|
function M.is_initialized()
|
|
return M._initialized
|
|
end
|
|
|
|
return M
|