mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-04-28 11:41:04 +00:00
Merge branch 'main' into feat/image-attachment
This commit is contained in:
commit
c92e2b8351
301 changed files with 33924 additions and 5940 deletions
|
|
@ -96,18 +96,18 @@ Settings are organized into categories. All settings should be placed within the
|
|||
|
||||
#### model
|
||||
|
||||
| Setting | Type | Description | Default |
|
||||
| -------------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
|
||||
| `model.name` | string | The Qwen model to use for conversations. | `undefined` |
|
||||
| `model.maxSessionTurns` | number | Maximum number of user/model/tool turns to keep in a session. -1 means unlimited. | `-1` |
|
||||
| `model.summarizeToolOutput` | object | Enables or disables the summarization of tool output. You can specify the token budget for the summarization using the `tokenBudget` setting. Note: Currently only the `run_shell_command` tool is supported. For example `{"run_shell_command": {"tokenBudget": 2000}}` | `undefined` |
|
||||
| `model.generationConfig` | object | Advanced overrides passed to the underlying content generator. Supports request controls such as `timeout`, `maxRetries`, `disableCacheControl`, and `customHeaders` (custom HTTP headers for API requests), along with fine-tuning knobs under `samplingParams` (for example `temperature`, `top_p`, `max_tokens`). Leave unset to rely on provider defaults. | `undefined` |
|
||||
| `model.chatCompression.contextPercentageThreshold` | number | Sets the threshold for chat history compression as a percentage of the model's total token limit. This is a value between 0 and 1 that applies to both automatic compression and the manual `/compress` command. For example, a value of `0.6` will trigger compression when the chat history exceeds 60% of the token limit. Use `0` to disable compression entirely. | `0.7` |
|
||||
| `model.skipNextSpeakerCheck` | boolean | Skip the next speaker check. | `false` |
|
||||
| `model.skipLoopDetection` | boolean | Disables loop detection checks. Loop detection prevents infinite loops in AI responses but can generate false positives that interrupt legitimate workflows. Enable this option if you experience frequent false positive loop detection interruptions. | `false` |
|
||||
| `model.skipStartupContext` | boolean | Skips sending the startup workspace context (environment summary and acknowledgement) at the beginning of each session. Enable this if you prefer to provide context manually or want to save tokens on startup. | `false` |
|
||||
| `model.enableOpenAILogging` | boolean | Enables logging of OpenAI API calls for debugging and analysis. When enabled, API requests and responses are logged to JSON files. | `false` |
|
||||
| `model.openAILoggingDir` | string | Custom directory path for OpenAI API logs. If not specified, defaults to `logs/openai` in the current working directory. Supports absolute paths, relative paths (resolved from current working directory), and `~` expansion (home directory). | `undefined` |
|
||||
| Setting | Type | Description | Default |
|
||||
| -------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
|
||||
| `model.name` | string | The Qwen model to use for conversations. | `undefined` |
|
||||
| `model.maxSessionTurns` | number | Maximum number of user/model/tool turns to keep in a session. -1 means unlimited. | `-1` |
|
||||
| `model.summarizeToolOutput` | object | Enables or disables the summarization of tool output. You can specify the token budget for the summarization using the `tokenBudget` setting. Note: Currently only the `run_shell_command` tool is supported. For example `{"run_shell_command": {"tokenBudget": 2000}}` | `undefined` |
|
||||
| `model.generationConfig` | object | Advanced overrides passed to the underlying content generator. Supports request controls such as `timeout`, `maxRetries`, `disableCacheControl`, `contextWindowSize` (override model's context window size), `customHeaders` (custom HTTP headers for API requests), and `extra_body` (additional body parameters for OpenAI-compatible API requests only), along with fine-tuning knobs under `samplingParams` (for example `temperature`, `top_p`, `max_tokens`). Leave unset to rely on provider defaults. | `undefined` |
|
||||
| `model.chatCompression.contextPercentageThreshold` | number | Sets the threshold for chat history compression as a percentage of the model's total token limit. This is a value between 0 and 1 that applies to both automatic compression and the manual `/compress` command. For example, a value of `0.6` will trigger compression when the chat history exceeds 60% of the token limit. Use `0` to disable compression entirely. | `0.7` |
|
||||
| `model.skipNextSpeakerCheck` | boolean | Skip the next speaker check. | `false` |
|
||||
| `model.skipLoopDetection` | boolean | Disables loop detection checks. Loop detection prevents infinite loops in AI responses but can generate false positives that interrupt legitimate workflows. Enable this option if you experience frequent false positive loop detection interruptions. | `false` |
|
||||
| `model.skipStartupContext` | boolean | Skips sending the startup workspace context (environment summary and acknowledgement) at the beginning of each session. Enable this if you prefer to provide context manually or want to save tokens on startup. | `false` |
|
||||
| `model.enableOpenAILogging` | boolean | Enables logging of OpenAI API calls for debugging and analysis. When enabled, API requests and responses are logged to JSON files. | `false` |
|
||||
| `model.openAILoggingDir` | string | Custom directory path for OpenAI API logs. If not specified, defaults to `logs/openai` in the current working directory. Supports absolute paths, relative paths (resolved from current working directory), and `~` expansion (home directory). | `undefined` |
|
||||
|
||||
**Example model.generationConfig:**
|
||||
|
||||
|
|
@ -117,10 +117,14 @@ Settings are organized into categories. All settings should be placed within the
|
|||
"generationConfig": {
|
||||
"timeout": 60000,
|
||||
"disableCacheControl": false,
|
||||
"contextWindowSize": 128000,
|
||||
"customHeaders": {
|
||||
"X-Request-ID": "req-123",
|
||||
"X-User-ID": "user-456"
|
||||
},
|
||||
"extra_body": {
|
||||
"enable_thinking": true
|
||||
},
|
||||
"samplingParams": {
|
||||
"temperature": 0.2,
|
||||
"top_p": 0.8,
|
||||
|
|
@ -131,7 +135,15 @@ Settings are organized into categories. All settings should be placed within the
|
|||
}
|
||||
```
|
||||
|
||||
The `customHeaders` field allows you to add custom HTTP headers to all API requests. This is useful for request tracing, monitoring, API gateway routing, or when different models require different headers. If `customHeaders` is defined in `modelProviders[].generationConfig.customHeaders`, it will be used directly; otherwise, headers from `model.generationConfig.customHeaders` will be used. No merging occurs between the two levels.
|
||||
**contextWindowSize:**
|
||||
|
||||
Overrides the default context window size for the selected model. Qwen Code determines the context window using built-in defaults based on model name matching, with a constant fallback value. Use this setting when a provider's effective context limit differs from Qwen Code's default. This value defines the model's assumed maximum context capacity, not a per-request token limit.
|
||||
|
||||
**customHeaders:**
|
||||
|
||||
Allows you to add custom HTTP headers to all API requests. This is useful for request tracing, monitoring, API gateway routing, or when different models require different headers. If `customHeaders` is defined in `modelProviders[].generationConfig.customHeaders`, it will be used directly; otherwise, headers from `model.generationConfig.customHeaders` will be used. No merging occurs between the two levels.
|
||||
|
||||
The `extra_body` field allows you to add custom parameters to the request body sent to the API. This is useful for provider-specific options that are not covered by the standard configuration fields. **Note: This field is only supported for OpenAI-compatible providers (`openai`, `qwen-oauth`). It is ignored for Anthropic and Gemini providers.** If `extra_body` is defined in `modelProviders[].generationConfig.extra_body`, it will be used directly; otherwise, values from `model.generationConfig.extra_body` will be used.
|
||||
|
||||
**model.openAILoggingDir examples:**
|
||||
|
||||
|
|
@ -161,6 +173,9 @@ Use `modelProviders` to declare curated model lists per auth type that the `/mod
|
|||
"X-Model-Version": "v1.0",
|
||||
"X-Request-Priority": "high"
|
||||
},
|
||||
"extra_body": {
|
||||
"enable_thinking": true
|
||||
},
|
||||
"samplingParams": { "temperature": 0.2 }
|
||||
}
|
||||
}
|
||||
|
|
@ -222,7 +237,7 @@ Per-field precedence for `generationConfig`:
|
|||
3. `settings.model.generationConfig`
|
||||
4. Content-generator defaults (`getDefaultGenerationConfig` for OpenAI, `getParameterValue` for Gemini, etc.)
|
||||
|
||||
`samplingParams` and `customHeaders` are both treated atomically; provider values replace the entire object. If `modelProviders[].generationConfig` defines these fields, they are used directly; otherwise, values from `model.generationConfig` are used. No merging occurs between provider and global configuration levels. Defaults from the content generator apply last so each provider retains its tuned baseline.
|
||||
`samplingParams`, `customHeaders`, and `extra_body` are all treated atomically; provider values replace the entire object. If `modelProviders[].generationConfig` defines these fields, they are used directly; otherwise, values from `model.generationConfig` are used. No merging occurs between provider and global configuration levels. Defaults from the content generator apply last so each provider retains its tuned baseline.
|
||||
|
||||
##### Selection persistence and recommendations
|
||||
|
||||
|
|
@ -283,6 +298,15 @@ If you are experiencing performance issues with file searching (e.g., with `@` c
|
|||
>
|
||||
> **Security Note for MCP servers:** These settings use simple string matching on MCP server names, which can be modified. If you're a system administrator looking to prevent users from bypassing this, consider configuring the `mcpServers` at the system settings level such that the user will not be able to configure any MCP servers of their own. This should not be used as an airtight security mechanism.
|
||||
|
||||
#### lsp
|
||||
|
||||
> [!warning]
|
||||
> **Experimental Feature**: LSP support is currently experimental and disabled by default. Enable it using the `--experimental-lsp` command line flag.
|
||||
|
||||
Language Server Protocol (LSP) provides code intelligence features like go-to-definition, find references, and diagnostics.
|
||||
|
||||
LSP server configuration is done through `.lsp.json` files in your project root directory, not through `settings.json`. See the [LSP documentation](../features/lsp) for configuration details and examples.
|
||||
|
||||
#### security
|
||||
|
||||
| Setting | Type | Description | Default |
|
||||
|
|
@ -482,6 +506,7 @@ Arguments passed directly when running the CLI can override other configurations
|
|||
| `--checkpointing` | | Enables [checkpointing](../features/checkpointing). | | |
|
||||
| `--acp` | | Enables ACP mode (Agent Client Protocol). Useful for IDE/editor integrations like [Zed](../integration-zed). | | Stable. Replaces the deprecated `--experimental-acp` flag. |
|
||||
| `--experimental-skills` | | Enables experimental [Agent Skills](../features/skills) (registers the `skill` tool and loads Skills from `.qwen/skills/` and `~/.qwen/skills/`). | | Experimental. |
|
||||
| `--experimental-lsp` | | Enables experimental [LSP (Language Server Protocol)](../features/lsp) feature for code intelligence (go-to-definition, find references, diagnostics, etc.). | | Experimental. Requires language servers to be installed. |
|
||||
| `--extensions` | `-e` | Specifies a list of extensions to use for the session. | Extension names | If not provided, all available extensions are used. Use the special term `qwen -e none` to disable all extensions. Example: `qwen -e my-extension -e my-other-extension` |
|
||||
| `--list-extensions` | `-l` | Lists all available extensions and exits. | | |
|
||||
| `--proxy` | | Sets the proxy for the CLI. | Proxy URL | Example: `--proxy http://localhost:7890`. |
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ export default {
|
|||
},
|
||||
'approval-mode': 'Approval Mode',
|
||||
mcp: 'MCP',
|
||||
lsp: 'LSP (Language Server Protocol)',
|
||||
'token-caching': 'Token Caching',
|
||||
sandbox: 'Sandboxing',
|
||||
language: 'i18n',
|
||||
|
|
|
|||
374
docs/users/features/lsp.md
Normal file
374
docs/users/features/lsp.md
Normal file
|
|
@ -0,0 +1,374 @@
|
|||
# Language Server Protocol (LSP) Support
|
||||
|
||||
Qwen Code provides native Language Server Protocol (LSP) support, enabling advanced code intelligence features like go-to-definition, find references, diagnostics, and code actions. This integration allows the AI agent to understand your code more deeply and provide more accurate assistance.
|
||||
|
||||
## Overview
|
||||
|
||||
LSP support in Qwen Code works by connecting to language servers that understand your code. When you work with TypeScript, Python, Go, or other supported languages, Qwen Code can automatically start the appropriate language server and use it to:
|
||||
|
||||
- Navigate to symbol definitions
|
||||
- Find all references to a symbol
|
||||
- Get hover information (documentation, type info)
|
||||
- View diagnostic messages (errors, warnings)
|
||||
- Access code actions (quick fixes, refactorings)
|
||||
- Analyze call hierarchies
|
||||
|
||||
## Quick Start
|
||||
|
||||
LSP is an experimental feature in Qwen Code. To enable it, use the `--experimental-lsp` command line flag:
|
||||
|
||||
```bash
|
||||
qwen --experimental-lsp
|
||||
```
|
||||
|
||||
For most common languages, Qwen Code will automatically detect and start the appropriate language server if it's installed on your system.
|
||||
|
||||
### Prerequisites
|
||||
|
||||
You need to have the language server for your programming language installed:
|
||||
|
||||
| Language | Language Server | Install Command |
|
||||
| --------------------- | -------------------------- | ------------------------------------------------------------------------------ |
|
||||
| TypeScript/JavaScript | typescript-language-server | `npm install -g typescript-language-server typescript` |
|
||||
| Python | pylsp | `pip install python-lsp-server` |
|
||||
| Go | gopls | `go install golang.org/x/tools/gopls@latest` |
|
||||
| Rust | rust-analyzer | [Installation guide](https://rust-analyzer.github.io/manual.html#installation) |
|
||||
|
||||
## Configuration
|
||||
|
||||
### .lsp.json File
|
||||
|
||||
You can configure language servers using a `.lsp.json` file in your project root. This uses the language-keyed format described in the [Claude Code plugin LSP configuration reference](https://code.claude.com/docs/en/plugins-reference#lsp-servers).
|
||||
|
||||
**Basic format:**
|
||||
|
||||
```json
|
||||
{
|
||||
"typescript": {
|
||||
"command": "typescript-language-server",
|
||||
"args": ["--stdio"],
|
||||
"extensionToLanguage": {
|
||||
".ts": "typescript",
|
||||
".tsx": "typescriptreact",
|
||||
".js": "javascript",
|
||||
".jsx": "javascriptreact"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Configuration Options
|
||||
|
||||
#### Required Fields
|
||||
|
||||
| Option | Type | Description |
|
||||
| --------------------- | ------ | ------------------------------------------------- |
|
||||
| `command` | string | Command to start the LSP server (must be in PATH) |
|
||||
| `extensionToLanguage` | object | Maps file extensions to language identifiers |
|
||||
|
||||
#### Optional Fields
|
||||
|
||||
| Option | Type | Default | Description |
|
||||
| ----------------------- | -------- | --------- | ------------------------------------------------------ |
|
||||
| `args` | string[] | `[]` | Command line arguments |
|
||||
| `transport` | string | `"stdio"` | Transport type: `stdio` or `socket` |
|
||||
| `env` | object | - | Environment variables |
|
||||
| `initializationOptions` | object | - | LSP initialization options |
|
||||
| `settings` | object | - | Server settings via `workspace/didChangeConfiguration` |
|
||||
| `workspaceFolder` | string | - | Override workspace folder |
|
||||
| `startupTimeout` | number | `10000` | Startup timeout in milliseconds |
|
||||
| `shutdownTimeout` | number | `5000` | Shutdown timeout in milliseconds |
|
||||
| `restartOnCrash` | boolean | `false` | Auto-restart on crash |
|
||||
| `maxRestarts` | number | `3` | Maximum restart attempts |
|
||||
| `trustRequired` | boolean | `true` | Require trusted workspace |
|
||||
|
||||
### TCP/Socket Transport
|
||||
|
||||
For servers that use TCP or Unix socket transport:
|
||||
|
||||
```json
|
||||
{
|
||||
"remote-lsp": {
|
||||
"transport": "tcp",
|
||||
"socket": {
|
||||
"host": "127.0.0.1",
|
||||
"port": 9999
|
||||
},
|
||||
"extensionToLanguage": {
|
||||
".custom": "custom"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Available LSP Operations
|
||||
|
||||
Qwen Code exposes LSP functionality through the unified `lsp` tool. Here are the available operations:
|
||||
|
||||
### Code Navigation
|
||||
|
||||
#### Go to Definition
|
||||
|
||||
Find where a symbol is defined.
|
||||
|
||||
```
|
||||
Operation: goToDefinition
|
||||
Parameters:
|
||||
- filePath: Path to the file
|
||||
- line: Line number (1-based)
|
||||
- character: Column number (1-based)
|
||||
```
|
||||
|
||||
#### Find References
|
||||
|
||||
Find all references to a symbol.
|
||||
|
||||
```
|
||||
Operation: findReferences
|
||||
Parameters:
|
||||
- filePath: Path to the file
|
||||
- line: Line number (1-based)
|
||||
- character: Column number (1-based)
|
||||
- includeDeclaration: Include the declaration itself (optional)
|
||||
```
|
||||
|
||||
#### Go to Implementation
|
||||
|
||||
Find implementations of an interface or abstract method.
|
||||
|
||||
```
|
||||
Operation: goToImplementation
|
||||
Parameters:
|
||||
- filePath: Path to the file
|
||||
- line: Line number (1-based)
|
||||
- character: Column number (1-based)
|
||||
```
|
||||
|
||||
### Symbol Information
|
||||
|
||||
#### Hover
|
||||
|
||||
Get documentation and type information for a symbol.
|
||||
|
||||
```
|
||||
Operation: hover
|
||||
Parameters:
|
||||
- filePath: Path to the file
|
||||
- line: Line number (1-based)
|
||||
- character: Column number (1-based)
|
||||
```
|
||||
|
||||
#### Document Symbols
|
||||
|
||||
Get all symbols in a document.
|
||||
|
||||
```
|
||||
Operation: documentSymbol
|
||||
Parameters:
|
||||
- filePath: Path to the file
|
||||
```
|
||||
|
||||
#### Workspace Symbol Search
|
||||
|
||||
Search for symbols across the workspace.
|
||||
|
||||
```
|
||||
Operation: workspaceSymbol
|
||||
Parameters:
|
||||
- query: Search query string
|
||||
- limit: Maximum results (optional)
|
||||
```
|
||||
|
||||
### Call Hierarchy
|
||||
|
||||
#### Prepare Call Hierarchy
|
||||
|
||||
Get the call hierarchy item at a position.
|
||||
|
||||
```
|
||||
Operation: prepareCallHierarchy
|
||||
Parameters:
|
||||
- filePath: Path to the file
|
||||
- line: Line number (1-based)
|
||||
- character: Column number (1-based)
|
||||
```
|
||||
|
||||
#### Incoming Calls
|
||||
|
||||
Find all functions that call the given function.
|
||||
|
||||
```
|
||||
Operation: incomingCalls
|
||||
Parameters:
|
||||
- callHierarchyItem: Item from prepareCallHierarchy
|
||||
```
|
||||
|
||||
#### Outgoing Calls
|
||||
|
||||
Find all functions called by the given function.
|
||||
|
||||
```
|
||||
Operation: outgoingCalls
|
||||
Parameters:
|
||||
- callHierarchyItem: Item from prepareCallHierarchy
|
||||
```
|
||||
|
||||
### Diagnostics
|
||||
|
||||
#### File Diagnostics
|
||||
|
||||
Get diagnostic messages (errors, warnings) for a file.
|
||||
|
||||
```
|
||||
Operation: diagnostics
|
||||
Parameters:
|
||||
- filePath: Path to the file
|
||||
```
|
||||
|
||||
#### Workspace Diagnostics
|
||||
|
||||
Get all diagnostic messages across the workspace.
|
||||
|
||||
```
|
||||
Operation: workspaceDiagnostics
|
||||
Parameters:
|
||||
- limit: Maximum results (optional)
|
||||
```
|
||||
|
||||
### Code Actions
|
||||
|
||||
#### Get Code Actions
|
||||
|
||||
Get available code actions (quick fixes, refactorings) at a location.
|
||||
|
||||
```
|
||||
Operation: codeActions
|
||||
Parameters:
|
||||
- filePath: Path to the file
|
||||
- line: Start line number (1-based)
|
||||
- character: Start column number (1-based)
|
||||
- endLine: End line number (optional, defaults to line)
|
||||
- endCharacter: End column (optional, defaults to character)
|
||||
- diagnostics: Diagnostics to get actions for (optional)
|
||||
- codeActionKinds: Filter by action kind (optional)
|
||||
```
|
||||
|
||||
Code action kinds:
|
||||
|
||||
- `quickfix` - Quick fixes for errors/warnings
|
||||
- `refactor` - Refactoring operations
|
||||
- `refactor.extract` - Extract to function/variable
|
||||
- `refactor.inline` - Inline function/variable
|
||||
- `source` - Source code actions
|
||||
- `source.organizeImports` - Organize imports
|
||||
- `source.fixAll` - Fix all auto-fixable issues
|
||||
|
||||
## Security
|
||||
|
||||
LSP servers are only started in trusted workspaces by default. This is because language servers run with your user permissions and can execute code.
|
||||
|
||||
### Trust Controls
|
||||
|
||||
- **Trusted Workspace**: LSP servers start automatically
|
||||
- **Untrusted Workspace**: LSP servers won't start unless `trustRequired: false` is set in the server configuration
|
||||
|
||||
To mark a workspace as trusted, use the `/trust` command or configure trusted folders in settings.
|
||||
|
||||
### Per-Server Trust Override
|
||||
|
||||
You can override trust requirements for specific servers in their configuration:
|
||||
|
||||
```json
|
||||
{
|
||||
"safe-server": {
|
||||
"command": "safe-language-server",
|
||||
"args": ["--stdio"],
|
||||
"trustRequired": false,
|
||||
"extensionToLanguage": {
|
||||
".safe": "safe"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Server Not Starting
|
||||
|
||||
1. **Check if the server is installed**: Run the command manually to verify
|
||||
2. **Check the PATH**: Ensure the server binary is in your system PATH
|
||||
3. **Check workspace trust**: The workspace must be trusted for LSP
|
||||
4. **Check logs**: Look for error messages in the console output
|
||||
5. **Verify --experimental-lsp flag**: Make sure you're using the flag when starting Qwen Code
|
||||
|
||||
### Slow Performance
|
||||
|
||||
1. **Large projects**: Consider excluding `node_modules` and other large directories
|
||||
2. **Server timeout**: Increase `startupTimeout` in server configuration for slow servers
|
||||
|
||||
### No Results
|
||||
|
||||
1. **Server not ready**: The server may still be indexing
|
||||
2. **File not saved**: Save your file for the server to pick up changes
|
||||
3. **Wrong language**: Check if the correct server is running for your language
|
||||
|
||||
### Debugging
|
||||
|
||||
Enable debug logging to see LSP communication:
|
||||
|
||||
```bash
|
||||
DEBUG=lsp* qwen --experimental-lsp
|
||||
```
|
||||
|
||||
Or check the LSP debugging guide at `packages/cli/LSP_DEBUGGING_GUIDE.md`.
|
||||
|
||||
## Claude Code Compatibility
|
||||
|
||||
Qwen Code supports Claude Code-style `.lsp.json` configuration files in the language-keyed format defined in the [Claude Code plugins reference](https://code.claude.com/docs/en/plugins-reference#lsp-servers). If you're migrating from Claude Code, use the language-as-key layout in your configuration.
|
||||
|
||||
### Configuration Format
|
||||
|
||||
The recommended format follows Claude Code's specification:
|
||||
|
||||
```json
|
||||
{
|
||||
"go": {
|
||||
"command": "gopls",
|
||||
"args": ["serve"],
|
||||
"extensionToLanguage": {
|
||||
".go": "go"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Claude Code LSP plugins can also supply `lspServers` in `plugin.json` (or a referenced `.lsp.json`). Qwen Code loads those configs when the extension is enabled, and they must use the same language-keyed format.
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Install language servers globally**: This ensures they're available in all projects
|
||||
2. **Use project-specific settings**: Configure server options per project when needed via `.lsp.json`
|
||||
3. **Keep servers updated**: Update your language servers regularly for best results
|
||||
4. **Trust wisely**: Only trust workspaces from trusted sources
|
||||
|
||||
## FAQ
|
||||
|
||||
### Q: How do I enable LSP?
|
||||
|
||||
Use the `--experimental-lsp` flag when starting Qwen Code:
|
||||
|
||||
```bash
|
||||
qwen --experimental-lsp
|
||||
```
|
||||
|
||||
### Q: How do I know which language servers are running?
|
||||
|
||||
Use the `/lsp status` command to see all configured and running language servers.
|
||||
|
||||
### Q: Can I use multiple language servers for the same file type?
|
||||
|
||||
Yes, but only one will be used for each operation. The first server that returns results wins.
|
||||
|
||||
### Q: Does LSP work in sandbox mode?
|
||||
|
||||
LSP servers run outside the sandbox to access your code. They're subject to workspace trust controls.
|
||||
Loading…
Add table
Add a link
Reference in a new issue