feat: adding multiple files

### Added

- **Smart Scope Resolution** — Tree-sitter + indentation context for
selections
  - `resolve_selection_context()` in `scope/init.lua` handles partial
functions,
    whole functions, multi-function spans, indent blocks, and whole-file
selections
  - Enclosing function automatically sent as context when selecting code
inside one
  - Whole-file selection (>=80% of lines) triggers project tree as
context
  - Indentation-based fallback when Tree-sitter is unavailable

- **Explain-to-Document Intent** — "explain" prompts generate
documentation
  - Detects prompts like "explain this", "tell me about", "what does",
"question"
  - Generates documentation comments and inserts them above selected
code
  - Shows notification if nothing is selected
  - Updated intent action from "none" to "insert" for explain intent

- **Granular LLM Status Notifications** — Real-time progress reporting
  - Inline virtual text and floating status window show current stage
  - Stages: "Reading context...", "Searching index...", "Gathering
context...",
    "Recalling patterns...", "Building prompt...", "Sending to
[provider]...",
    "Processing response...", "Generating patch...", "Applying code..."
  - `update_inline_status()` in `thinking_placeholder.lua`
  - `update_stage()` in `thinking.lua`

- **Thinking Placeholder Positioning** — "Implementing..." appears above
selection
  - Uses `virt_lines_above = true` on extmark at selection start line
  - Dynamic status text updates during LLM processing

### Changed

- **Providers reduced to Copilot and Ollama only**
  - Removed Claude, OpenAI, and Gemini provider integrations
  - Deleted `llm/openai.lua` and `llm/gemini.lua`
  - Cleaned `llm/init.lua`, `config/defaults.lua`, `types.lua`,
`credentials.lua`,
    `cost/init.lua`, and `events/queue.lua` of all references
  - `valid_providers` now only includes "copilot" and "ollama"

- **Removed timer-based delayed processing** — Prompts are processed
instantly
  - Removed `timer` field, `timeout_ms`, and timer setup/cancellation
from `worker.lua`

- **Removed chat/agent/split window UI**
  - Deleted `ui/chat.lua`, `windows.lua`, `ui/switcher.lua`
  - Removed `CoderOpen`, `CoderClose`, `CoderToggle` commands
  - Removed window management from `autocmds.lua`, `inject.lua`,
`executor.lua`
  - Removed auto-open companion file logic

- **Commands removed from menu** (code retained with TODOs for
re-enabling)
  - `CoderAddApiKey`, `CoderRemoveApiKey`, `CoderBrain`,
`CoderFeedback`,
    `CoderMemories`, `CoderForget`, `CoderProcess`
  - Subcommands `process`, `status`, `memories`, `forget`,
`llm-feedback-good`,
    `llm-feedback-bad`, `add-api-key`, `remove-api-key` removed from
completion

### Fixed

- Fixed `patch.lua` syntax error — missing `if` wrapper around
SEARCH/REPLACE block
- Fixed `CoderModel` require path typo
(`codetyper.adapters.config.credentials`
  → `codetyper.config.credentials`)
- Fixed `thinking_placeholder` extmark placement appearing after
selection
  instead of above it
This commit is contained in:
2026-03-18 23:05:26 -04:00
parent f110a3ed25
commit e57209a1f8
32 changed files with 1284 additions and 3414 deletions

View File

@@ -1,6 +1,6 @@
# Contributing to Codetyper.nvim
First off, thank you for considering contributing to Codetyper.nvim! 🎉
Thank you for considering contributing to Codetyper.nvim!
## Table of Contents
@@ -34,6 +34,7 @@ This project and everyone participating in it is governed by our commitment to c
- Neovim >= 0.8.0
- Lua 5.1+ or LuaJIT
- Git
- One of: GitHub Copilot (via copilot.lua/copilot.vim) or Ollama
### Local Development
@@ -45,50 +46,104 @@ This project and everyone participating in it is governed by our commitment to c
2. Create a minimal test configuration:
```lua
-- test/minimal_init.lua
-- tests/minimal_init.lua
vim.opt.runtimepath:append(".")
require("codetyper").setup({
llm = {
provider = "ollama", -- Use local for testing
provider = "ollama",
},
})
```
3. Test your changes:
```bash
nvim --clean -u test/minimal_init.lua
nvim --clean -u tests/minimal_init.lua
```
4. Run the full test suite:
```bash
make test
```
## Project Structure
```
codetyper.nvim/
├── lua/
── codetyper/
├── init.lua # Main entry point
├── config.lua # Configuration management
├── types.lua # Type definitions
├── utils.lua # Utility functions
├── commands.lua # Command definitions
├── window.lua # Window/split management
├── parser.lua # Prompt tag parser
── gitignore.lua # .gitignore management
├── autocmds.lua # Autocommands
├── inject.lua # Code injection
├── health.lua # Health check
── llm/
├── init.lua # LLM interface
── claude.lua # Claude API client
── ollama.lua # Ollama API client
├── plugin/
└── codetyper.lua # Plugin loader
├── doc/
└── codetyper.txt # Vim help documentation
├── lua/codetyper/
── init.lua # Entry point, setup()
│ ├── inject.lua # Code injection into buffers
├── parser.lua # /@ @/ tag parser
│ ├── types.lua # Lua type annotations
│ ├── config/
├── defaults.lua # Default configuration values
├── credentials.lua # Credential & model storage
── preferences.lua # User preference persistence
├── adapters/nvim/
├── autocmds.lua # Autocommands (prompt processing)
── commands.lua # All :Coder* user commands
├── cmp/init.lua # nvim-cmp source integration
── ui/
── thinking.lua # Status window ("Thinking...")
│ │ ├── throbber.lua # Animated spinner
│ ├── logs.lua # Internal log viewer
│ │ ├── logs_panel.lua # Standalone logs panel
│ ├── context_modal.lua # File-context picker
│ │ └── diff_review.lua # Side-by-side diff review
│ │
│ ├── core/
│ │ ├── transform.lua # Visual selection -> prompt -> apply
│ │ ├── marks.lua # Extmark tracking for injection
│ │ ├── thinking_placeholder.lua # Inline virtual text status
│ │ ├── scope/init.lua # Tree-sitter + indent scope
│ │ ├── intent/init.lua # Prompt intent classifier
│ │ ├── llm/
│ │ │ ├── init.lua # Provider dispatcher
│ │ │ ├── copilot.lua # GitHub Copilot client
│ │ │ ├── ollama.lua # Ollama client (local)
│ │ │ ├── confidence.lua # Response confidence scoring
│ │ │ └── selector.lua # Provider selection logic
│ │ ├── diff/
│ │ │ ├── diff.lua # Diff utilities
│ │ │ ├── patch.lua # Patch generation + staleness
│ │ │ ├── conflict.lua # Git-style conflict resolution
│ │ │ └── search_replace.lua # SEARCH/REPLACE block parser
│ │ ├── events/queue.lua # Priority event queue
│ │ ├── scheduler/
│ │ │ ├── scheduler.lua # Event dispatch orchestrator
│ │ │ ├── worker.lua # Async LLM worker
│ │ │ ├── executor.lua # Tool execution
│ │ │ ├── loop.lua # Processing loop
│ │ │ └── resume.lua # Session resume
│ │ ├── cost/init.lua # Token usage + cost estimation
│ │ └── memory/ # Knowledge graph & pattern learning
│ │
│ ├── features/
│ │ ├── completion/ # Inline completion & suggestions
│ │ └── indexer/ # Project indexing & analysis
│ │
│ ├── support/
│ │ ├── utils.lua # General utilities
│ │ ├── logger.lua # Logging system
│ │ ├── tree.lua # Project tree generator
│ │ ├── health.lua # :checkhealth provider
│ │ ├── gitignore.lua # .gitignore management
│ │ └── langmap.lua # Language detection
│ │
│ ├── params/agents/ # Config tables for subsystems
│ └── prompts/ # System & agent prompts
├── plugin/codetyper.lua # Plugin loader
├── doc/codetyper.txt # Vim help documentation
├── doc/tags # Help tags
├── tests/ # Test suite
├── Makefile # Build/test/lint targets
├── README.md
├── LICENSE
├── CHANGELOG.md
├── CONTRIBUTING.md
── llms.txt
── LICENSE
└── llms.txt # LLM context documentation
```
## Making Changes
@@ -96,10 +151,10 @@ codetyper.nvim/
### Branch Naming
Use descriptive branch names:
- `feature/description` - New features
- `fix/description` - Bug fixes
- `docs/description` - Documentation updates
- `refactor/description` - Code refactoring
- `feature/description` New features
- `fix/description` Bug fixes
- `docs/description` Documentation updates
- `refactor/description` Code refactoring
### Commit Messages
@@ -113,28 +168,28 @@ type(scope): description
```
Types:
- `feat` - New feature
- `fix` - Bug fix
- `docs` - Documentation
- `style` - Formatting, no code change
- `refactor` - Code restructuring
- `test` - Adding tests
- `chore` - Maintenance
- `feat` New feature
- `fix` Bug fix
- `docs` Documentation
- `style` Formatting, no code change
- `refactor` Code restructuring
- `test` Adding tests
- `chore` Maintenance
Examples:
```
feat(llm): add support for GPT-4 API
fix(parser): handle nested prompt tags
docs(readme): update installation instructions
feat(scope): add indentation-based fallback for scope resolution
fix(patch): handle missing if-wrapper in SEARCH/REPLACE block
docs(readme): update commands reference for current state
```
## Submitting Changes
1. **Ensure your code follows the style guide**
2. **Update documentation** if needed
3. **Update CHANGELOG.md** for notable changes
4. **Test your changes** thoroughly
5. **Create a pull request** with:
1. Ensure your code follows the style guide
2. Update documentation if needed
3. Update `CHANGELOG.md` for notable changes
4. Test your changes thoroughly
5. Create a pull request with:
- Clear title describing the change
- Description of what and why
- Reference to any related issues
@@ -165,11 +220,12 @@ docs(readme): update installation instructions
### Lua Style
- Use 2 spaces for indentation
- Use tabs for indentation
- Use `snake_case` for variables and functions
- Use `PascalCase` for module names
- Add type annotations with `---@param`, `---@return`, etc.
- Document public functions with LuaDoc comments
- Avoid obvious/redundant comments
```lua
---@mod module_name Module description
@@ -178,9 +234,8 @@ local M = {}
--- Description of the function
---@param name string The parameter description
---@return boolean Success status
---@return boolean
function M.example_function(name)
-- Implementation
return true
end
@@ -189,24 +244,31 @@ return M
### Documentation
- Keep README.md up to date
- Update doc/codetyper.txt for new features
- Keep `README.md` up to date
- Update `doc/codetyper.txt` for new features
- Regenerate `doc/tags` after help file changes
- Use clear, concise language
- Include examples where helpful
## Testing
### Running Tests
```bash
make test # Run all tests
make test-file F=x # Run a specific test file
make test-verbose # Verbose output
make lint # Run luacheck
make format # Format with stylua
```
### Manual Testing
1. Test all commands work correctly
2. Test with different file types
3. Test window management
4. Test LLM integration (both Claude and Ollama)
5. Test edge cases (empty files, large files, etc.)
### Health Check
Run `:checkhealth codetyper` to verify the plugin setup.
3. Test LLM integration (Copilot and Ollama)
4. Test edge cases (empty files, large files, no Tree-sitter, etc.)
5. Run `:checkhealth codetyper`
## Questions?
@@ -220,8 +282,7 @@ Feel free to:
- **Maintainer**: cargdev
- **Email**: carlos.gutierrez@carg.dev
- **Website**: [cargdev.io](https://cargdev.io)
- **Blog**: [blog.cargdev.io](https://blog.cargdev.io)
---
Thank you for contributing! 🙏
Thank you for contributing!