在非官方的 VS Code 环境(如 Antigravity等)中使用 Pylance,我们需要绕过 Pylance 内部针对编辑器名称和签名路径的双重验证逻辑.
- 客户端文件:
dist/extension.bundle.js
- 作用: Pylance 启动时,第一步会读取
vscode.env.appName以及当前运行路径,判断其是否属于正版的 Visual Studio Code 系列。 - 修改: 定位由
! ( ["Visual Studio Code", ...].includes(...) && ...)构成的判定条件,并直接用false替换掉了整个条件表达式,使得“检测为非合法编辑器则报错”这个逻辑永远不会被触发。
- 服务端文件:
dist/server.bundle.js
- 作用: 客户端放行后,会向语言服务端(Language Server)发送一长串授权文本(EULA协议内容)作为握手令牌。服务端拿到令牌后,会自己再校验一次。如果它发现不在 VSCode 官方环境里,就会强制比对这段文本并故意报错拒绝连接。
- 修改: 在服务端文件中搜索
!==JSON.parse(e))throw Error((这是服务端判定握手令牌不符合要求并抛出异常的地方),将其强行修改为了if(false)throw Error(。这样服务端就永远不会主动断开连接了。
const fs = require('fs');
const path = require('path');
const os = require('os');
// 1. 定义非 VS Code 的扩展目录 ((兼容 Windows/Linux 以及多种衍生版编辑器))
const possibleDirs = [
path.join(os.homedir(), '.antigravity-ide-server', 'extensions'), // Antigravity
path.join(os.homedir(), '.cursor', 'extensions'), // Cursor
path.join(os.homedir(), '.vscode-oss', 'extensions') // VSCodium
// 如果有其他编辑器的特定目录,可以继续往这里加
];
// 筛选出电脑上实际存在的非官方扩展目录
const targetDirs = possibleDirs.filter(dir => fs.existsSync(dir));
if (targetDirs.length === 0) {
console.error("❌ 找不到任何非官方编辑器的扩展目录。");
process.exit(1);
}
// 遍历每个存在的非官方扩展目录并执行破解
targetDirs.forEach(extDir => {
console.log(`\n==============================================`);
console.log(`📂 开始扫描扩展目录: ${extDir}`);
// 找到该目录下所有的 pylance 文件夹 (可能安装了多个版本,全部进行破解)
const pylanceFolders = fs.readdirSync(extDir)
.filter(dir => dir.startsWith('ms-python.vscode-pylance-'));
if (pylanceFolders.length === 0) {
console.log("⚠️ 该目录下未找到 Pylance 插件,跳过。");
return;
}
pylanceFolders.forEach(pylanceFolder => {
const distPath = path.join(extDir, pylanceFolder, 'dist');
const extensionPath = path.join(distPath, 'extension.bundle.js');
const serverPath = path.join(distPath, 'server.bundle.js');
console.log(`\n🔍 正在破解 Pylance 版本: ${pylanceFolder}`);
// 2. 破解 extension.bundle.js (客户端检测)
if (fs.existsSync(extensionPath)) {
let content = fs.readFileSync(extensionPath, 'utf8');
const clientRegex = /!\(\["Visual Studio Code","Visual Studio Code - Insiders","Visual Studio Code - Exploration"\]\.includes\([a-zA-Z0-9_.$]+\)&&\([a-zA-Z0-9_.$]+\([a-zA-Z0-9_.$]+,[^)]+\)\|\|[a-zA-Z0-9_.$]+\([a-zA-Z0-9_.$]+,\[[^\]]+\]\)\)\)\)/g;
if (clientRegex.test(content)) {
content = content.replace(clientRegex, 'false');
fs.writeFileSync(extensionPath, content, 'utf8');
console.log(" ✅ 成功解除 extension.bundle.js 客户端环境限制");
} else {
console.log(" ⚠️ extension.bundle.js 未找到匹配代码 (可能已破解)。");
}
}
// 3. 破解 server.bundle.js (服务端检测)
if (fs.existsSync(serverPath)) {
let content = fs.readFileSync(serverPath, 'utf8');
const serverRegex = /if\([^)]+!==JSON\.parse\(e\)\)throw Error\(/g;
if (serverRegex.test(content)) {
content = content.replace(serverRegex, 'if(false)throw Error(');
fs.writeFileSync(serverPath, content, 'utf8');
console.log(" ✅ 成功解除 server.bundle.js 服务端环境限制");
} else {
console.log(" ⚠️ server.bundle.js 未找到匹配代码 (可能已破解)。");
}
}
});
});
console.log(`\n==============================================`);
console.log("🎉 所有非 VS Code 编辑器的 Pylance 破解完毕!请重启您的编辑器。");
需要安装Node.js
1 个帖子 - 1 位参与者