Skip to content

Commit f6c9e3a

Browse files
committed
More permissively parse version
1 parent 5859d5b commit f6c9e3a

4 files changed

Lines changed: 440 additions & 11 deletions

File tree

‎dist/index.js‎

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9932,15 +9932,35 @@ function formatSemVerOrString(v) {
99329932
}
99339933
return v.format();
99349934
}
9935+
function parsePyrightVersionFromStdout(stdout) {
9936+
const prefix = "pyright ";
9937+
for (let line of stdout.trim().split(/\r?\n/)) {
9938+
line = line.trimEnd();
9939+
if (line.startsWith(prefix)) {
9940+
try {
9941+
return new import_semver2.SemVer(line.slice(prefix.length));
9942+
} catch {
9943+
}
9944+
}
9945+
}
9946+
throw new Error(`Failed to parse pyright version from ${JSON.stringify(stdout)}`);
9947+
}
99359948
async function getPyrightInfo() {
99369949
const version3 = await getPyrightVersion();
99379950
if (version3 === "PATH") {
99389951
const command = import_which.default.sync("pyright");
9939-
const versionOut = cp.execFileSync(command, ["--version"], { encoding: "utf8" });
9940-
const versionRaw = versionOut.trim().split(/\s+/).at(-1);
9941-
if (!versionRaw)
9942-
throw new Error(`Failed to parse pyright version from ${JSON.stringify(versionOut)}`);
9943-
const version4 = new import_semver2.SemVer(versionRaw);
9952+
let version4;
9953+
for (let i = 0; i < 2; i++) {
9954+
try {
9955+
const versionOut = cp.execFileSync(command, ["--version"], { encoding: "utf8" });
9956+
version4 = parsePyrightVersionFromStdout(versionOut);
9957+
break;
9958+
} catch (e) {
9959+
if (i === 1) {
9960+
throw e;
9961+
}
9962+
}
9963+
}
99449964
return {
99459965
kind: "path",
99469966
version: version4,

0 commit comments

Comments
 (0)