Saving inital Docs POC

This commit is contained in:
Luke Hagar
2025-11-09 22:22:52 -06:00
commit 95f23e2eb3
35 changed files with 5457 additions and 0 deletions

131
docs/ux-best-practices.md Normal file
View File

@@ -0,0 +1,131 @@
# UX Best Practices for Volar-based Language Servers
> [Docs Index](README.md) • [Repo README](../README.md) • [Telemetry](telemetry-and-observability.md) • [Error Handling](error-handling-and-resilience.md)
A language server lives inside the editor experience; thoughtful UX keeps users confident and productive. This guide focuses on user-facing behaviors—status messages, progress indicators, error notifications, settings UX, and documentation—for Volar integrations.
## Goals
1. **Transparency** users know what the server is doing (diagnostics running, schema fetching, errors).
2. **Actionable feedback** every warning/error tells the user how to resolve it.
3. **Control** users can adjust settings, restart the server, or disable features when necessary.
## Status & Progress Indicators
### Initial Load / Heavy Tasks
- Use work-done progress for long-running operations (>500ms).
```ts
async function withProgress(title: string, task: () => Promise<void>) {
const progress = await connection.window.createWorkDoneProgress();
progress.begin(title);
try {
await task();
} finally {
progress.done();
}
}
```
Examples:
- “Volar (JSON/YAML): Indexing workspace…”
- “Fetching schemas…”
### Idle Status
- Provide a summary command (VS Code command or Neovim RPC) that returns current workspace stats: number of open documents, diagnostics pending, schema cache status.
- Show a status bar entry with quick access to commands (e.g., “Volar: Ready • Diagnostics: 12”).
## Notifications
Use the right severity for notifications:
| Scenario | API | Message |
| --- | --- | --- |
| Non-blocking info (feature enabled) | `showInformationMessage` | “Volar Take Over Mode is now active.” |
| Recoverable issue | `showWarningMessage` | “Failed to fetch schema. Using cached version.” |
| Action required | `showErrorMessage` | “Invalid configuration: volarJsonYaml.schemas must be an array.” |
Tips:
- Provide action buttons: `showWarningMessage(msg, 'Retry', 'Open Settings')`.
- Limit frequency—use throttling so the same warning doesnt appear repeatedly.
## Settings UX
### Documentation
- Publish a markdown file (e.g., `docs/configuration-and-projects.md`) describing every setting with default values and examples.
- If shipping a VS Code extension, include configuration defaults in `package.json` with `markdownDescription`.
### Validation & Feedback
- When settings are invalid, log the error and notify users with actionable instructions (“Set `volarJsonYaml.schemas` to an array of objects. See docs URL.”).
- Provide commands or links that open the relevant settings file (VS Code: `workbench.action.openSettingsJson`).
### Profiles / Presets
- Offer easy ways to switch between configurations (commands like “Volar: Use Strict Profile”).
- Document the effect of each profile (diagnostic severity, Take Over Mode, etc.).
## Command Palette & Shortcuts
Provide commands for common tasks:
- “Volar: Restart Language Server”
- “Volar: Clear Schema Cache”
- “Volar: Show Server Logs”
- “Volar: Toggle Take Over Mode”
In Neovim/Sublime, expose equivalents via user commands (`:VolarRestart`, etc.).
## Error Messaging
| Bad | Good |
| --- | --- |
| “Schema fetch failed” | “Schema fetch failed (404). Using cached schema from 2024-05-12. Configure schemas in volarJsonYaml.schemas.” |
| “Config invalid” | “Invalid volarJsonYaml.diagnostics.severity: expected string 'error' | 'warn' | 'info'. Reverted to 'warn'. See docs/…” |
Guidelines:
- Include cause, fallback action, and next steps.
- Link to docs or open configuration automatically when possible.
## Editor Integration Details
### VS Code
- Status bar entry (`window.createStatusBarItem`) with commands.
- Register commands for restart/refresh in `package.json`.
- Respect VS Codes log level (use `connection.console` so logs appear in “Output ▸ Volar”).
### Neovim
- Provide Lua callbacks to show server status, toggle settings, or display logs.
- Write to a log file (`~/.cache/volar/log.txt`) for easy sharing.
### CLI
- Print progress messages (e.g., “Analyzing 120 files…”) with a spinner.
- Exit with non-zero status when diagnostics contain errors; print summary at the end.
## Documentation & Support
- Maintain a “Known Issues” section (Take Over Mode pitfalls, incompatible extensions).
- Provide reproduction steps for common fixes (clearing Vite cache, installing TS 5.x).
- Encourage users to attach logs + configuration when filing issues; document how to retrieve them.
## UX Checklist
- [ ] Progress indicators for long tasks.
- [ ] Status bar/command to show server status.
- [ ] Clear, actionable notifications for errors/warnings.
- [ ] Settings documented with defaults and examples.
- [ ] Commands for restart, cache clearing, log viewing.
- [ ] Error messages include cause + next steps.
- [ ] Logs accessible via editor output or file.
- [ ] CLI/Neovim equivalents for key UX features.
Thoughtful UX turns a powerful language server into a delightful developer experience. Communicate clearly, surface actionable options, and give users control over how Volar behaves within their editors.