Skip to content

Commit 3251371

Browse files
committed
Merged PR posit-dev/positron-python#118: limit registered runtimes to >= 3.8
Merge pull request #118 from posit-dev/limit-registered-runtimes limit registered runtimes to >= 3.8 -------------------- Commit message for posit-dev/positron-python@30bb1a5: ignore pre-existing file with pyright issues -------------------- Commit message for posit-dev/positron-python@cb6fca8: limit registered runtimes to >= 3.8 Addresses #654. Authored-by: Wasim Lorgat <[email protected]> Signed-off-by: Wasim Lorgat <[email protected]>
1 parent 72badad commit 3251371

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

extensions/positron-python/pythonFiles/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ ignore = [
2929
'testlauncher.py',
3030
'visualstudio_py_testlauncher.py',
3131
'testing_tools/unittest_discovery.py',
32+
'testing_tools/adapter/report.py',
3233
'testing_tools/adapter/util.py',
3334
'testing_tools/adapter/pytest/_discovery.py',
3435
'testing_tools/adapter/pytest/_pytest_item.py',

extensions/positron-python/src/client/activation/jedi/positronLanguageRuntimes.ts

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import * as vscode from 'vscode';
1212
import * as crypto from 'crypto';
1313
import { Disposable, DocumentFilter, LanguageClientOptions } from 'vscode-languageclient/node';
1414

15-
import { compare } from 'semver';
15+
import * as semver from 'semver';
1616
import { EXTENSION_ROOT_DIR, PYTHON_LANGUAGE } from '../../common/constants';
1717
import { IConfigurationService, IDisposableRegistry, IInstaller, InstallerResponse, Product, Resource } from '../../common/types';
1818
import { InstallOptions } from '../../common/installer/types';
@@ -49,6 +49,8 @@ export class PositronJediLanguageServerProxy implements ILanguageServerProxy {
4949

5050
private registered = false;
5151

52+
private readonly minimumSupportedVersion = '3.8.0';
53+
5254
constructor(
5355
private readonly serviceContainer: IServiceContainer,
5456
private readonly interpreterService: IInterpreterService,
@@ -161,20 +163,26 @@ export class PositronJediLanguageServerProxy implements ILanguageServerProxy {
161163
let debugPort;
162164
for (const interpreter of interpreters) {
163165

164-
// If required, also locate an available port for the debugger
165-
if (debug) {
166-
if (debugPort === undefined) {
167-
debugPort = 5678; // Default port for debugpy
166+
// Only register runtimes for supported versions
167+
if (this.isVersionSupported(interpreter?.version)) {
168+
169+
// If required, also locate an available port for the debugger
170+
if (debug) {
171+
if (debugPort === undefined) {
172+
debugPort = 5678; // Default port for debugpy
173+
}
174+
debugPort = await portfinder.getPortPromise({ port: debugPort });
168175
}
169-
debugPort = await portfinder.getPortPromise({ port: debugPort });
170-
}
171176

172-
const runtime: vscode.Disposable = await this.registerLanguageRuntime(
173-
jupyterAdapterApi, interpreter, debugPort, logLevel, options);
174-
this.disposables.push(runtime);
177+
const runtime: vscode.Disposable = await this.registerLanguageRuntime(
178+
jupyterAdapterApi, interpreter, debugPort, logLevel, options);
179+
this.disposables.push(runtime);
175180

176-
if (debugPort !== undefined) {
177-
debugPort += 1;
181+
if (debugPort !== undefined) {
182+
debugPort += 1;
183+
}
184+
} else {
185+
traceVerbose(`Not registering runtime due to unsupported interpreter version ${interpreter.displayName}`);
178186
}
179187
}
180188
}
@@ -257,11 +265,20 @@ export class PositronJediLanguageServerProxy implements ILanguageServerProxy {
257265
// Compare versions in descending order
258266
const av: string = this.getVersionString(a.version);
259267
const bv: string = this.getVersionString(b.version);
260-
return -compare(av, bv);
268+
return -semver.compare(av, bv);
261269
});
262270
return copy;
263271
}
264272

273+
/**
274+
* Check if a version is supported (i.e. >= the minimum supported version).
275+
* Also returns true if the version could not be determined.
276+
*/
277+
private isVersionSupported(version: PythonVersion | undefined): boolean {
278+
const versionString = version && this.getVersionString(version);
279+
return !versionString || semver.gte(versionString, this.minimumSupportedVersion);
280+
}
281+
265282
/**
266283
* Formats python version info as a semver string, adapted from
267284
* common/utils/version to work with PythonVersion instances.

0 commit comments

Comments
 (0)