diff --git a/python/helpers/icons/PythonHelpersIcons.java b/python/helpers/icons/PythonHelpersIcons.java index c80728d8bc73..63f1581154ff 100644 --- a/python/helpers/icons/PythonHelpersIcons.java +++ b/python/helpers/icons/PythonHelpersIcons.java @@ -9,6 +9,10 @@ import javax.swing.*; * Don't repeat mistakes of others ;-) */ public class PythonHelpersIcons { - public static final Icon Keybd_closed = IconLoader.getIcon("/coverage/htmlfiles/keybd_closed.png"); // 35x12 - public static final Icon Keybd_open = IconLoader.getIcon("/coverage/htmlfiles/keybd_open.png"); // 35x12 + private static Icon load(String path) { + return IconLoader.getIcon(path, PythonHelpersIcons.class); + } + + public static final Icon Keybd_closed = load("/coverage/htmlfiles/keybd_closed.png"); // 35x12 + public static final Icon Keybd_open = load("/coverage/htmlfiles/keybd_open.png"); // 35x12 } diff --git a/python/pluginSrc/com/jetbrains/python/facet/PythonFacetType.java b/python/pluginSrc/com/jetbrains/python/facet/PythonFacetType.java index a4b9c16d6cec..e71a767c58c8 100644 --- a/python/pluginSrc/com/jetbrains/python/facet/PythonFacetType.java +++ b/python/pluginSrc/com/jetbrains/python/facet/PythonFacetType.java @@ -9,12 +9,12 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleType; import com.intellij.openapi.projectRoots.ProjectJdkTable; import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.util.IconLoader; import com.intellij.patterns.ElementPattern; import com.intellij.util.indexing.FileContent; import com.jetbrains.python.PythonFileType; import com.jetbrains.python.module.PythonModuleType; import com.jetbrains.python.sdk.PythonSdkType; +import icons.PythonIcons; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -26,7 +26,7 @@ import java.util.List; * @author yole */ public class PythonFacetType extends FacetType { - public static final Icon ICON = IconLoader.getIcon("/com/jetbrains/python/icons/python.png"); + public static final Icon ICON = PythonIcons.Python.Icons.Python; @NonNls private static final String ID = "Python"; diff --git a/python/rest/src/com/jetbrains/rest/RestFileType.java b/python/rest/src/com/jetbrains/rest/RestFileType.java index 63bdf14b9b32..3142be8b63aa 100644 --- a/python/rest/src/com/jetbrains/rest/RestFileType.java +++ b/python/rest/src/com/jetbrains/rest/RestFileType.java @@ -1,7 +1,7 @@ package com.jetbrains.rest; import com.intellij.openapi.fileTypes.LanguageFileType; -import com.intellij.openapi.util.IconLoader; +import icons.RestIcons; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -40,7 +40,7 @@ public class RestFileType extends LanguageFileType { @Nullable public Icon getIcon() { - return IconLoader.getIcon("/com/jetbrains/rest/res/rst.png", RestFileType.class); + return RestIcons.Rst; } } diff --git a/python/rest/src/icons/RestIcons.java b/python/rest/src/icons/RestIcons.java index 37a8509d1aee..810d775edecd 100644 --- a/python/rest/src/icons/RestIcons.java +++ b/python/rest/src/icons/RestIcons.java @@ -9,5 +9,9 @@ import javax.swing.*; * Don't repeat mistakes of others ;-) */ public class RestIcons { - public static final Icon Rst = IconLoader.getIcon("/com/jetbrains/rest/res/rst.png"); // 16x16 + private static Icon load(String path) { + return IconLoader.getIcon(path, RestIcons.class); + } + + public static final Icon Rst = load("/com/jetbrains/rest/res/rst.png"); // 16x16 } diff --git a/python/src/com/jetbrains/pyqt/QtTranslationsFileType.java b/python/src/com/jetbrains/pyqt/QtTranslationsFileType.java index bf0a5e545fd6..0961948be93e 100644 --- a/python/src/com/jetbrains/pyqt/QtTranslationsFileType.java +++ b/python/src/com/jetbrains/pyqt/QtTranslationsFileType.java @@ -1,7 +1,7 @@ package com.jetbrains.pyqt; import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.util.IconLoader; +import icons.PythonIcons; /** * @author yole @@ -10,7 +10,7 @@ public class QtTranslationsFileType extends QtFileType implements FileType { public static QtTranslationsFileType INSTANCE = new QtTranslationsFileType(); protected QtTranslationsFileType() { - super("Qt translations file", "Qt Linguist translations files", "ts", IconLoader.getIcon("/com/jetbrains/pyqt/tsFile.png")); + super("Qt translations file", "Qt Linguist translations files", "ts", PythonIcons.Pyqt.TsFile); } protected String getToolName() { diff --git a/python/src/com/jetbrains/pyqt/QtUIFileType.java b/python/src/com/jetbrains/pyqt/QtUIFileType.java index 73985c82e681..7788662cdb51 100644 --- a/python/src/com/jetbrains/pyqt/QtUIFileType.java +++ b/python/src/com/jetbrains/pyqt/QtUIFileType.java @@ -1,7 +1,7 @@ package com.jetbrains.pyqt; import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.util.IconLoader; +import icons.PythonIcons; /** * @author yole @@ -10,7 +10,7 @@ public class QtUIFileType extends QtFileType implements FileType { public static QtUIFileType INSTANCE = new QtUIFileType(); protected QtUIFileType() { - super("Qt UI file", "Qt UI Designer form files", "ui", IconLoader.getIcon("/com/jetbrains/pyqt/uiForm.png")); + super("Qt UI file", "Qt UI Designer form files", "ui", PythonIcons.Pyqt.UiForm); } protected String getToolName() { diff --git a/python/src/com/jetbrains/python/PyIcons.java b/python/src/com/jetbrains/python/PyIcons.java index 7f93670b0bda..c4738e9e7228 100644 --- a/python/src/com/jetbrains/python/PyIcons.java +++ b/python/src/com/jetbrains/python/PyIcons.java @@ -1,6 +1,6 @@ package com.jetbrains.python; -import com.intellij.openapi.util.IconLoader; +import icons.PythonIcons; import org.jetbrains.annotations.NonNls; import javax.swing.*; @@ -13,7 +13,7 @@ import javax.swing.*; public interface PyIcons { @NonNls String DATA_ROOT = "icons/"; /*"/com/jetbrains/python/PyIcons";*/ - Icon PRIVATE = IconLoader.getIcon(DATA_ROOT + "nodes/lock.png"); - Icon PREDEFINED = IconLoader.getIcon(DATA_ROOT + "nodes/cyan-dot.png"); - Icon INVISIBLE = IconLoader.getIcon(DATA_ROOT + "nodes/red-inv-triangle.png"); + Icon PRIVATE = PythonIcons.Python.Icons.Nodes.Lock; + Icon PREDEFINED = PythonIcons.Python.Icons.Nodes.Cyan_dot; + Icon INVISIBLE = PythonIcons.Python.Icons.Nodes.Red_inv_triangle; } diff --git a/python/src/com/jetbrains/python/PythonModuleTypeBase.java b/python/src/com/jetbrains/python/PythonModuleTypeBase.java index 73115756b36f..7f9801eed6fa 100644 --- a/python/src/com/jetbrains/python/PythonModuleTypeBase.java +++ b/python/src/com/jetbrains/python/PythonModuleTypeBase.java @@ -2,7 +2,7 @@ package com.jetbrains.python; import com.intellij.ide.util.projectWizard.ModuleBuilder; import com.intellij.openapi.module.ModuleType; -import com.intellij.openapi.util.IconLoader; +import icons.PythonIcons; import org.jetbrains.annotations.NonNls; import javax.swing.*; @@ -12,9 +12,9 @@ import javax.swing.*; */ public abstract class PythonModuleTypeBase extends ModuleType { @NonNls public static final String PYTHON_MODULE = "PYTHON_MODULE"; - private final Icon myBigIcon = IconLoader.getIcon("/com/jetbrains/python/icons/python_24.png"); - private final Icon myOpenIcon = IconLoader.getIcon("/com/jetbrains/python/icons/pythonOpen.png"); - private final Icon myClosedIcon = IconLoader.getIcon("/com/jetbrains/python/icons/pythonClosed.png"); + private final Icon myBigIcon = PythonIcons.Python.Icons.Python_24; + private final Icon myOpenIcon = PythonIcons.Python.Icons.PythonOpen; + private final Icon myClosedIcon = PythonIcons.Python.Icons.PythonClosed; protected PythonModuleTypeBase() { super(PYTHON_MODULE); diff --git a/python/src/com/jetbrains/python/buildout/BuildoutFacetType.java b/python/src/com/jetbrains/python/buildout/BuildoutFacetType.java index d999e0fa539b..b8a0e0a6e9af 100644 --- a/python/src/com/jetbrains/python/buildout/BuildoutFacetType.java +++ b/python/src/com/jetbrains/python/buildout/BuildoutFacetType.java @@ -6,8 +6,8 @@ import com.intellij.facet.FacetTypeId; import com.intellij.facet.FacetTypeRegistry; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleType; -import com.intellij.openapi.util.IconLoader; import com.jetbrains.python.PythonModuleTypeBase; +import icons.PythonIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -48,7 +48,7 @@ public class BuildoutFacetType extends FacetType implements PyFunction { - private static final Icon PROPERTY_GETTER = IconLoader.findIcon("/com/jetbrains/python/icons/propertyGetter.png"); - private static final Icon PROPERTY_SETTER = IconLoader.findIcon("/com/jetbrains/python/icons/propertySetter.png"); - private static final Icon PROPERTY_DELETER = IconLoader.findIcon("/com/jetbrains/python/icons/propertyDeleter.png"); + private static final Icon PROPERTY_GETTER = PythonIcons.Python.Icons.PropertyGetter; + private static final Icon PROPERTY_SETTER = PythonIcons.Python.Icons.PropertySetter; + private static final Icon PROPERTY_DELETER = PythonIcons.Python.Icons.PropertyDeleter; public PyFunctionImpl(ASTNode astNode) { super(astNode); diff --git a/python/src/com/jetbrains/python/remote/PythonRemoteSdkAdditionalData.java b/python/src/com/jetbrains/python/remote/PythonRemoteSdkAdditionalData.java index 825a19ccdc5e..8710e902b5d3 100644 --- a/python/src/com/jetbrains/python/remote/PythonRemoteSdkAdditionalData.java +++ b/python/src/com/jetbrains/python/remote/PythonRemoteSdkAdditionalData.java @@ -295,14 +295,14 @@ public class PythonRemoteSdkAdditionalData extends PythonSdkAdditionalData imple if (element != null) { data.setHost(element.getAttributeValue(HOST)); - data.setPort(Integer.parseInt(element.getAttributeValue(PORT))); - data.setAnonymous(Boolean.parseBoolean(element.getAttributeValue(ANONYMOUS))); + data.setPort(StringUtil.parseInt(element.getAttributeValue(PORT), 22)); + data.setAnonymous(StringUtil.parseBoolean(element.getAttributeValue(ANONYMOUS), false)); data.setSerializedUserName(element.getAttributeValue(USERNAME)); data.setSerializedPassword(element.getAttributeValue(PASSWORD)); data.setPrivateKeyFile(StringUtil.nullize(element.getAttributeValue(PRIVATE_KEY_FILE))); data.setKnownHostsFile(StringUtil.nullize(element.getAttributeValue(KNOWN_HOSTS_FILE))); data.setSerializedPassphrase(element.getAttributeValue(PASSPHRASE)); - data.setUseKeyPair(Boolean.parseBoolean(element.getAttributeValue(USE_KEY_PAIR))); + data.setUseKeyPair(StringUtil.parseBoolean(element.getAttributeValue(USE_KEY_PAIR), false)); data.setInterpreterPath(StringUtil.nullize(element.getAttributeValue(INTERPRETER_PATH))); data.setPyCharmTempFilesPath(StringUtil.nullize(element.getAttributeValue(PYCHARM_HELPERS_PATH))); diff --git a/python/src/com/jetbrains/python/run/PythonConfigurationType.java b/python/src/com/jetbrains/python/run/PythonConfigurationType.java index 3098fa9d07a3..2abe39117d20 100644 --- a/python/src/com/jetbrains/python/run/PythonConfigurationType.java +++ b/python/src/com/jetbrains/python/run/PythonConfigurationType.java @@ -6,7 +6,7 @@ import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.configurations.RunConfigurationModule; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.IconLoader; +import icons.PythonIcons; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -29,7 +29,7 @@ public class PythonConfigurationType implements ConfigurationType { return null; } - private final Icon _icon = IconLoader.getIcon("/com/jetbrains/python/icons/python.png"); + private final Icon _icon = PythonIcons.Python.Icons.Python; private static class PythonConfigurationFactory extends ConfigurationFactory { protected PythonConfigurationFactory(ConfigurationType configurationType) { diff --git a/python/src/com/jetbrains/python/sdk/IronPythonSdkFlavor.java b/python/src/com/jetbrains/python/sdk/IronPythonSdkFlavor.java index 1f556e56c539..11821f160903 100644 --- a/python/src/com/jetbrains/python/sdk/IronPythonSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/IronPythonSdkFlavor.java @@ -1,8 +1,8 @@ package com.jetbrains.python.sdk; import com.intellij.execution.configurations.GeneralCommandLine; -import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.text.StringUtil; +import icons.PythonIcons; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -84,6 +84,6 @@ public class IronPythonSdkFlavor extends PythonSdkFlavor { @Override public Icon getIcon() { - return IconLoader.getIcon("/com/jetbrains/python/icons/dotnet.png"); + return PythonIcons.Python.Icons.Dotnet; } } diff --git a/python/src/com/jetbrains/python/sdk/JythonSdkFlavor.java b/python/src/com/jetbrains/python/sdk/JythonSdkFlavor.java index 363f08a9e205..28fdb5b001cd 100644 --- a/python/src/com/jetbrains/python/sdk/JythonSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/JythonSdkFlavor.java @@ -2,10 +2,10 @@ package com.jetbrains.python.sdk; import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.execution.configurations.ParamsGroup; -import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.jetbrains.python.run.PythonCommandLineState; +import icons.PythonIcons; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -66,6 +66,6 @@ public class JythonSdkFlavor extends PythonSdkFlavor { @Override public Icon getIcon() { - return IconLoader.getIcon("/com/jetbrains/python/icons/jython.png"); + return PythonIcons.Python.Icons.Jython; } } diff --git a/python/src/com/jetbrains/python/sdk/PyPySdkFlavor.java b/python/src/com/jetbrains/python/sdk/PyPySdkFlavor.java index 20b34516cfa2..b948a9c95507 100644 --- a/python/src/com/jetbrains/python/sdk/PyPySdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/PyPySdkFlavor.java @@ -1,10 +1,10 @@ package com.jetbrains.python.sdk; import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.jetbrains.python.psi.LanguageLevel; +import icons.PythonIcons; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -77,6 +77,6 @@ public class PyPySdkFlavor extends PythonSdkFlavor { @Override public Icon getIcon() { - return IconLoader.getIcon("/com/jetbrains/python/icons/pypy.png"); + return PythonIcons.Python.Icons.Pypy; } } diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkFlavor.java b/python/src/com/jetbrains/python/sdk/PythonSdkFlavor.java index f80c9e12c803..d257402d02ea 100644 --- a/python/src/com/jetbrains/python/sdk/PythonSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/PythonSdkFlavor.java @@ -6,12 +6,12 @@ import com.intellij.execution.process.ProcessOutput; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.SdkAdditionalData; -import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.encoding.EncodingManager; import com.jetbrains.python.psi.LanguageLevel; +import icons.PythonIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -226,6 +226,6 @@ public abstract class PythonSdkFlavor { } public Icon getIcon() { - return IconLoader.getIcon("/com/jetbrains/python/icons/python.png"); + return PythonIcons.Python.Icons.Python; } } diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkType.java b/python/src/com/jetbrains/python/sdk/PythonSdkType.java index 5df5247449e6..f6cefba7431f 100644 --- a/python/src/com/jetbrains/python/sdk/PythonSdkType.java +++ b/python/src/com/jetbrains/python/sdk/PythonSdkType.java @@ -28,7 +28,6 @@ import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; @@ -46,6 +45,7 @@ import com.jetbrains.python.psi.LanguageLevel; import com.jetbrains.python.psi.impl.PyBuiltinCache; import com.jetbrains.python.psi.search.PyProjectScopeBuilder; import com.jetbrains.python.remote.PythonRemoteSdkAdditionalData; +import icons.PythonIcons; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -84,7 +84,7 @@ public class PythonSdkType extends SdkType { } public Icon getIcon() { - return IconLoader.getIcon("/com/jetbrains/python/icons/python.png"); + return PythonIcons.Python.Icons.Python; } @NotNull diff --git a/python/src/com/jetbrains/python/sdk/VirtualEnvSdkFlavor.java b/python/src/com/jetbrains/python/sdk/VirtualEnvSdkFlavor.java index c9ea879fbcfd..a59aac80ced0 100644 --- a/python/src/com/jetbrains/python/sdk/VirtualEnvSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/VirtualEnvSdkFlavor.java @@ -3,12 +3,12 @@ package com.jetbrains.python.sdk; import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.SystemProperties; +import icons.PythonIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -117,6 +117,6 @@ public class VirtualEnvSdkFlavor extends CPythonSdkFlavor { @Override public Icon getIcon() { - return IconLoader.getIcon("/com/jetbrains/python/icons/virtualenv.png"); + return PythonIcons.Python.Icons.Virtualenv; } } diff --git a/python/src/com/jetbrains/python/testing/PythonTestConfigurationType.java b/python/src/com/jetbrains/python/testing/PythonTestConfigurationType.java index 1fa6fbd8c428..28b069ae8fa4 100644 --- a/python/src/com/jetbrains/python/testing/PythonTestConfigurationType.java +++ b/python/src/com/jetbrains/python/testing/PythonTestConfigurationType.java @@ -2,13 +2,13 @@ package com.jetbrains.python.testing; import com.intellij.execution.configurations.*; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.IconLoader; import com.jetbrains.python.PyBundle; import com.jetbrains.python.testing.attest.PythonAtTestRunConfiguration; import com.jetbrains.python.testing.doctest.PythonDocTestRunConfiguration; import com.jetbrains.python.testing.nosetest.PythonNoseTestRunConfiguration; import com.jetbrains.python.testing.pytest.PyTestRunConfiguration; import com.jetbrains.python.testing.unittest.PythonUnitTestRunConfiguration; +import icons.PythonIcons; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -29,7 +29,7 @@ public class PythonTestConfigurationType implements ConfigurationType { return ConfigurationTypeUtil.findConfigurationType(PythonTestConfigurationType.class); } - private static final Icon ICON = IconLoader.getIcon("/com/jetbrains/python/icons/pythonTests.png"); + private static final Icon ICON = PythonIcons.Python.Icons.PythonTests; private static class PythonUnitTestConfigurationFactory extends ConfigurationFactory { protected PythonUnitTestConfigurationFactory(ConfigurationType configurationType) { diff --git a/python/testData/joinLines/LongExpression-after.py b/python/testData/joinLines/LongExpression-after.py new file mode 100644 index 000000000000..7fc1972a9b79 --- /dev/null +++ b/python/testData/joinLines/LongExpression-after.py @@ -0,0 +1 @@ +really_really_really_really_really_really_really_long_name = percentage_complete.as_integer_ratio() \ No newline at end of file diff --git a/python/testData/joinLines/LongExpression.py b/python/testData/joinLines/LongExpression.py new file mode 100644 index 000000000000..a58f8434142f --- /dev/null +++ b/python/testData/joinLines/LongExpression.py @@ -0,0 +1,2 @@ +really_really_really_really_really_really_really_long_name = percentage_complete\ + .as_integer_ratio() \ No newline at end of file diff --git a/python/testData/resolve/ReferenceInDocstring.py b/python/testData/resolve/ReferenceInDocstring.py new file mode 100644 index 000000000000..d3a566e71135 --- /dev/null +++ b/python/testData/resolve/ReferenceInDocstring.py @@ -0,0 +1,7 @@ +from datetime import datetime + +def foo(p): + """Foo + :param datetime p: a datetime + + """ \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyJoinLinesTest.java b/python/testSrc/com/jetbrains/python/PyJoinLinesTest.java index 93234c071898..cfec42363c17 100644 --- a/python/testSrc/com/jetbrains/python/PyJoinLinesTest.java +++ b/python/testSrc/com/jetbrains/python/PyJoinLinesTest.java @@ -65,4 +65,5 @@ public class PyJoinLinesTest extends PyTestCase { public void testTwoStatements() { doTest(); } public void testStringWithSlash() { doTest(); } public void testListOfStrings() { doTest(); } + public void testLongExpression() { doTest(); } } diff --git a/python/testSrc/com/jetbrains/python/PyResolveTest.java b/python/testSrc/com/jetbrains/python/PyResolveTest.java index 3991c0d911c0..ab3a496bf146 100644 --- a/python/testSrc/com/jetbrains/python/PyResolveTest.java +++ b/python/testSrc/com/jetbrains/python/PyResolveTest.java @@ -476,4 +476,8 @@ public class PyResolveTest extends PyResolveTestCase { public void testKWArg() { assertResolvesTo(PyClass.class, "timedelta"); } + + public void testReferenceInDocstring() { + assertResolvesTo(PyClass.class, "datetime"); + } }