autocomplete-plus 仅是补全调度器,不分析代码结构或读取类型注解,语义补全需依赖 atom-ternjs、ide-python 等语言专属 provider 提供 ast 解析与类型推导能力。

Atom 默认的代码补全只做符号记忆(比如输 con 提示 console),要实现函数参数提示、方法链推导、类型感知这类语义级补全,必须装对 provider 并配好运行时依赖——不是开个开关就能有。
为什么 autocomplete-plus 自身做不到语义补全
autocomplete-plus 只是补全调度器,它不分析代码结构,也不读 node_modules 或 Python 类型注解。它只干三件事:监听输入、收集所有已注册 provider 的建议、合并去重后弹框。真正提供 fetch( 后提示 url, options? 的,是语言专属的 provider:
-
atom-ternjs(JS/TS):靠本地启动 Tern 服务解析 AST,支持 ES6+、jQuery、Browser API -
ide-python+python-language-server(Python):后者负责类型推导,前者负责桥接 Atom UI -
autocomplete-java+(Java):依赖JAVA_HOME和编译器路径,不靠 LSP 也能跑
装了 autocomplete-plus 却没装对应 provider,就等于买了遥控器但没接电视——按任何键都黑屏。
JS 语义补全:atom-ternjs 配置要点
别用 autocomplete-javascript 或 language-babel 替代 atom-ternjs,前者只补内置对象,后者会劫持语法识别导致补全失效。
- 先确保系统已装
node和git(atom-ternjs安装时要调用) - 命令行执行:
apm install atom-ternjs - 打开项目根目录 → 菜单
Packages → Atom Ternjs → Configure project→ 点Save & Restart Server,生成.tern-project - 在
.tern-project中显式启用需要的插件,例如:"ecma6": true, "jquery": true, "browser": true
如果补全卡顿或 CPU 拉满,大概率是 .tern-project 里 libs 列了太多全局库,删掉非项目必需的条目。
Python 参数级补全必须走 ide-python
autocomplete-python 只能补 os.path. 这种模块路径,对你自己写的 def send_email(to: str, subject: str),它在 send_email( 后完全沉默。
- 装
ide-python:apm install ide-python(它会自动拉取并管理python-language-server) - 确认
python-language-server已安装:pip install python-language-server(Windows 用户注意:必须用和 Atom 同一环境的 Python) - 右下角状态栏必须显示
Python(不是Python (Jedi)或Plain Text);新建文件务必先保存为.py后缀 - 底部状态栏出现
Python Language Server: connected才算真正就位
常见失败点:Windows 上 Atom 启动时没继承系统 PATH,导致找不到 pyls;解决办法是用快捷方式带完整路径启动 Atom,或在 config.cson 里手动指定 ide-python 的 pythonPath。
补全失效时优先检查这三处
90% 的“补全不工作”问题都卡在这三个地方,顺序不能乱:
- 右下角语法名是否正确?
JavaScript≠JavaScript (JSX),Python≠Python (Jedi) -
autocomplete-plus是否是蓝色Enabled?灰色Disabled或根本没出现在 Packages 列表里,就别往下试了 - 对应 provider 是否在运行?打开
Developer Tools → Console,输入atom.packages.getActivePackage('atom-ternjs')?.mainModule(或换为你装的 provider 名),返回undefined就说明没加载成功
provider 加载失败常伴随 Uncaught TypeError: Cannot read property 'getSuggestions' of undefined,这不是 Atom 坏了,是某个插件覆盖了接口却没实现方法——禁用所有非必要 autocomplete 相关插件,只留 autocomplete-plus 和你要的语言 provider,再逐个加回来排查。











