vscode智能提示依赖LSP和本地类型分析双驱动,核心是编辑器与语言能力解耦;IntelliSense作为LSP客户端,90%功能由typescript-language-server等后台服务提供,VSCode仅负责渲染与通信。

VSCode 的智能提示不是靠“猜”,而是靠语言服务器(LSP)和本地类型分析双驱动,核心在于它把编辑器功能和语言能力解耦了。
IntelliSense 本质是 LSP 客户端,不是 VSCode 自己写的补全逻辑
你看到的 import 提示、函数参数预览、跳转定义,90% 来自运行在后台的 typescript-language-server、pylsp 或 rust-analyzer。VSCode 只负责渲染、触发、传文件内容——它甚至不解析 TypeScript 类型。
- 关闭
typescript.preferences.includePackagejsonAutoImports后,import补全会立刻变少,这不是 VSCode 设置,是 TS 服务响应策略变了 - 打开一个没装
eslint插件的 JS 文件,console.后仍能提示,因为tsserver内置了 dom 和 node.js 全局类型 - 如果
node_modules被删了,TS 项目里大量补全失效,不是插件坏了,是语言服务器找不到@types声明文件
javaScript/TypeScript 场景下,jsconfig.json 或 tsconfig.json 直接决定提示范围
没有配置文件时,VSCode 默认以单文件为单位做类型推导,跨文件引用几乎不工作;一旦存在有效配置,它就启用项目级语义分析。
-
"compilerOptions": { "allowSyntheticDefaultImports": true }开启后,import react from 'react'才不会被标红,补全才包含React.useState -
"include": ["src/**/*"]漏写,src/utils.ts里的工具函数在src/App.tsx中就不会出现在补全列表里 - 用
npm link本地调试包时,必须在tsconfig.json的"paths"里配好别名,否则导入路径补全和跳转全部失效
python 用户常误以为 Pylance 是“增强版 IntelliSense”,其实它是替代品
原生 Python 插件用的是 python-language-server(已停更),而 Pylance 是微软自研的、基于 pyright 的新语言服务器——它不依赖 pip install 环境,而是直接读取 .pyi 存根和 AST。
- 禁用
Pylance后,requests.get().json()返回类型变成Any,补全只剩通用方法;启用后能精确提示dict键名(如果有类型注解或存根) -
typing.TYPE_CHECKING块里的 import 不会被运行时加载,但Pylance会扫描它,从而补全仅用于类型提示的模块 - 虚拟环境路径没在
python.defaultInterpreterPath里正确设置,from django.db import models就不会触发models.补全——因为Pylance找不到django包源码
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "lib": ["ES2020", "DOM"], "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "strict": true, "noEmit": true, "esModuleInterop": true, "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", "incremental": true, "plugins": [ { "name": "@zwave-js/ts-config" } ] }, "include": ["src/**/*", "types/**/*"], "exclude": ["node_modules"] }
真正卡住 IntelliSense 的,往往不是 VSCode 设置,而是语言服务器能否拿到准确的项目结构、类型定义和运行时上下文。改完 tsconfig.json 必须重启 TS 服务(Ctrl+Shift+P → Typescript: Restart TS server),不然所有改动都白调。