From 5f64cfe98e4554e3c1d3be4a7752acf8b4c98017 Mon Sep 17 00:00:00 2001 From: Semyon Proshev Date: Tue, 23 Jan 2018 21:01:55 +0300 Subject: [PATCH] Support incomplete stubs by changing language level to Python 3.7 (PY-22868) --- python/src/com/jetbrains/python/pyi/PyiFile.kt | 2 +- .../PyUnresolvedReferencesInspection/StubWithGetAttr/a.py | 8 ++++++++ .../StubWithGetAttr/complete.py | 5 +++++ .../StubWithGetAttr/complete.pyi | 2 ++ .../StubWithGetAttr/incomplete.py | 5 +++++ .../StubWithGetAttr/incomplete.pyi | 6 ++++++ .../inspections/PyUnresolvedReferencesInspectionTest.java | 5 +++++ .../testSrc/com/jetbrains/python/pyi/PyiParsingTest.java | 7 +++++-- 8 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/a.py create mode 100644 python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/complete.py create mode 100644 python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/complete.pyi create mode 100644 python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/incomplete.py create mode 100644 python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/incomplete.pyi diff --git a/python/src/com/jetbrains/python/pyi/PyiFile.kt b/python/src/com/jetbrains/python/pyi/PyiFile.kt index a912681c510f..199bc9c55e49 100644 --- a/python/src/com/jetbrains/python/pyi/PyiFile.kt +++ b/python/src/com/jetbrains/python/pyi/PyiFile.kt @@ -30,7 +30,7 @@ class PyiFile(viewProvider: FileViewProvider) : PyFileImpl(viewProvider, PyiLang override fun toString() = "PyiFile:" + name - override fun getLanguageLevel() = LanguageLevel.PYTHON36 + override fun getLanguageLevel() = LanguageLevel.PYTHON37 override fun multiResolveName(name: String, exported: Boolean): List { val baseResults = super.multiResolveName(name, exported) diff --git a/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/a.py b/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/a.py new file mode 100644 index 000000000000..2b9df1adc7ed --- /dev/null +++ b/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/a.py @@ -0,0 +1,8 @@ +from complete import a +from complete import b +from complete import e + +from incomplete import c +from incomplete import d + +print(a, b, c, d, e) \ No newline at end of file diff --git a/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/complete.py b/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/complete.py new file mode 100644 index 000000000000..11de0296575e --- /dev/null +++ b/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/complete.py @@ -0,0 +1,5 @@ +def a(): + return 1 + +def b(): + return "" \ No newline at end of file diff --git a/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/complete.pyi b/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/complete.pyi new file mode 100644 index 000000000000..2a33bc135899 --- /dev/null +++ b/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/complete.pyi @@ -0,0 +1,2 @@ +def a() -> int: ... +def b() -> str: ... \ No newline at end of file diff --git a/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/incomplete.py b/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/incomplete.py new file mode 100644 index 000000000000..5cf9a08fd006 --- /dev/null +++ b/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/incomplete.py @@ -0,0 +1,5 @@ +def c(): + return 1 + +def d(): + return "" \ No newline at end of file diff --git a/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/incomplete.pyi b/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/incomplete.pyi new file mode 100644 index 000000000000..b2649ff5f269 --- /dev/null +++ b/python/testData/inspections/PyUnresolvedReferencesInspection/StubWithGetAttr/incomplete.pyi @@ -0,0 +1,6 @@ +from typing import Any + + +def c() -> int: ... + +def __getattr__(name) -> Any: ... \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java index 696de7efde0f..0f963bb0df9f 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyUnresolvedReferencesInspectionTest.java @@ -665,6 +665,11 @@ public class PyUnresolvedReferencesInspectionTest extends PyInspectionTestCase { runWithLanguageLevel(LanguageLevel.PYTHON37, this::doMultiFileTest); } + // PY-22868 + public void testStubWithGetAttr() { + doMultiFileTest(); + } + @NotNull @Override protected Class getInspectionClass() { diff --git a/python/testSrc/com/jetbrains/python/pyi/PyiParsingTest.java b/python/testSrc/com/jetbrains/python/pyi/PyiParsingTest.java index 37bb1becc27c..36737ee5610c 100644 --- a/python/testSrc/com/jetbrains/python/pyi/PyiParsingTest.java +++ b/python/testSrc/com/jetbrains/python/pyi/PyiParsingTest.java @@ -17,7 +17,10 @@ package com.jetbrains.python.pyi; import com.intellij.testFramework.ParsingTestCase; import com.intellij.testFramework.TestDataPath; -import com.jetbrains.python.*; +import com.jetbrains.python.PythonDialectsTokenSetContributor; +import com.jetbrains.python.PythonDialectsTokenSetProvider; +import com.jetbrains.python.PythonTestUtil; +import com.jetbrains.python.PythonTokenSetContributor; import com.jetbrains.python.psi.LanguageLevel; /** @@ -50,6 +53,6 @@ public class PyiParsingTest extends ParsingTestCase { doTest(); assertInstanceOf(myFile, PyiFile.class); final PyiFile pyiFile = (PyiFile)myFile; - assertEquals(LanguageLevel.PYTHON36, pyiFile.getLanguageLevel()); + assertEquals(LanguageLevel.PYTHON37, pyiFile.getLanguageLevel()); } }