mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 05:21:29 +07:00
[python] PY-82518 Support GraalPy python version
(cherry picked from commit 3311ca83f0875a77c0fd370d5d66afc66f7393ca) IJ-MR-178647 GitOrigin-RevId: 1d3583e8524ccee70a90918dfa57e11bd51c9641
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f52619319c
commit
fd7ad7fcd7
@@ -31,6 +31,7 @@ import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -65,7 +66,7 @@ public abstract class PythonSdkFlavor<D extends PyFlavorData> {
|
||||
.maximumSize(1000)
|
||||
.build();
|
||||
|
||||
private static final Pattern VERSION_RE = Pattern.compile("(Python \\S+).*");
|
||||
private static final Pattern VERSION_RE = Pattern.compile("((Python|GraalPy) (\\S+)).*", Pattern.DOTALL);
|
||||
private static final Logger LOG = Logger.getInstance(PythonSdkFlavor.class);
|
||||
|
||||
|
||||
@@ -436,8 +437,9 @@ public abstract class PythonSdkFlavor<D extends PyFlavorData> {
|
||||
* @return level or null if no parsable output was found
|
||||
*/
|
||||
public static @Nullable LanguageLevel getLanguageLevelFromVersionStringStaticSafe(@NotNull String versionString) {
|
||||
if (versionString.startsWith(PYTHON_VERSION_STRING_PREFIX)) {
|
||||
return LanguageLevel.fromPythonVersionSafe(versionString.substring(PYTHON_VERSION_STRING_PREFIX.length()));
|
||||
final Matcher m = VERSION_RE.matcher(versionString);
|
||||
if (m.matches()) {
|
||||
return LanguageLevel.fromPythonVersionSafe(m.group(3));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -30,23 +30,25 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PySdkFlavorTest extends PyTestCase {
|
||||
public void testPython27VersionString() {
|
||||
final PythonSdkFlavor flavor = UnixPythonSdkFlavor.getInstance();
|
||||
final String versionOutput = "Python 2.7.6\n";
|
||||
final Sdk mockSdk = createMockSdk(flavor, versionOutput);
|
||||
assertEquals("Python 2.7.6", mockSdk.getVersionString());
|
||||
assertEquals(LanguageLevel.PYTHON27, flavor.getLanguageLevel(mockSdk));
|
||||
testVersionAndFlavor("Python 2.7.6\n", "Python 2.7.6", LanguageLevel.PYTHON27);
|
||||
}
|
||||
|
||||
public void testPython34VersionString() {
|
||||
final PythonSdkFlavor flavor = UnixPythonSdkFlavor.getInstance();
|
||||
final String versionOutput = "Python 3.4.0\n";
|
||||
final Sdk mockSdk = createMockSdk(flavor, versionOutput);
|
||||
assertEquals("Python 3.4.0", mockSdk.getVersionString());
|
||||
assertEquals(LanguageLevel.PYTHON34, flavor.getLanguageLevel(mockSdk));
|
||||
testVersionAndFlavor("Python 3.4.0\n", "Python 3.4.0", LanguageLevel.PYTHON34);
|
||||
}
|
||||
|
||||
public void testGraalPyVersionString() {
|
||||
testVersionAndFlavor("GraalPy 3.12.8 (Interpreted JVM Development Build)\n", "GraalPy 3.12.8", LanguageLevel.PYTHON312);
|
||||
}
|
||||
|
||||
|
||||
private void testVersionAndFlavor(
|
||||
@NotNull String versionOutput, @NotNull String expectedVersionString, @NotNull LanguageLevel expectedLanguageLevel
|
||||
) {
|
||||
final PythonSdkFlavor<?> flavor = UnixPythonSdkFlavor.getInstance();
|
||||
final Sdk mockSdk = createMockSdk(flavor, versionOutput);
|
||||
assertEquals(expectedVersionString, mockSdk.getVersionString());
|
||||
assertEquals(expectedLanguageLevel, flavor.getLanguageLevel(mockSdk));
|
||||
}
|
||||
|
||||
|
||||
// TODO: Add tests for MayaPy and IronPython SDK flavors
|
||||
|
||||
Reference in New Issue
Block a user