diff --git a/python/src/com/jetbrains/python/documentation/DocStringReferenceProvider.java b/python/src/com/jetbrains/python/documentation/DocStringReferenceProvider.java index 7210f6493bbc..0e1a26b73967 100644 --- a/python/src/com/jetbrains/python/documentation/DocStringReferenceProvider.java +++ b/python/src/com/jetbrains/python/documentation/DocStringReferenceProvider.java @@ -43,14 +43,14 @@ public class DocStringReferenceProvider extends PsiReferenceProvider { StructuredDocString docString = StructuredDocString.parse(text); if (docString != null) { result.addAll(referencesFromNames(element, offset, docString, - docString.getTagArguments(StructuredDocString.PARAM_TAGS), "parameter")); + docString.getTagArguments(StructuredDocString.PARAM_TAGS), StructuredDocString.PARAMETER)); result.addAll(referencesFromNames(element, offset, docString, - docString.getTagArguments(StructuredDocString.PARAM_TYPE_TAGS), "parameter_type")); + docString.getTagArguments(StructuredDocString.PARAM_TYPE_TAGS), StructuredDocString.PARAMETER_TYPE)); result.addAll(referencesFromNames(element, offset, docString, - docString.getKeywordArgumentSubstrings(), "keyword")); + docString.getKeywordArgumentSubstrings(), StructuredDocString.KEYWORD)); result.addAll(referencesFromNames(element, offset, docString, - docString.getTagArguments(StructuredDocString.VARIABLE_TAGS), "variable")); + docString.getTagArguments(StructuredDocString.VARIABLE_TAGS), StructuredDocString.VARIABLE)); } return result.toArray(new PsiReference[result.size()]); } @@ -69,9 +69,11 @@ public class DocStringReferenceProvider extends PsiReferenceProvider { if (PyNames.isIdentifier(s)) { result.add(new DocStringParameterReference(element, name.getTextRange().shiftRight(offset), refType)); } - final Substring type = docString.getParamTypeSubstring(s); - if (type != null) { - result.addAll(parseTypeReferences(element, type, offset)); + if (!refType.equals(StructuredDocString.PARAMETER_TYPE)) { + final Substring type = docString.getParamTypeSubstring(s); + if (type != null) { + result.addAll(parseTypeReferences(element, type, offset)); + } } } final Substring rtype = docString.getReturnTypeSubstring(); diff --git a/python/src/com/jetbrains/python/documentation/StructuredDocString.java b/python/src/com/jetbrains/python/documentation/StructuredDocString.java index d1fe556b9af4..de4b44d5f3c4 100644 --- a/python/src/com/jetbrains/python/documentation/StructuredDocString.java +++ b/python/src/com/jetbrains/python/documentation/StructuredDocString.java @@ -33,6 +33,11 @@ public abstract class StructuredDocString { public static String[] RAISES_TAGS = new String[] { "raises", "raise", "except", "exception" }; public static String[] RETURN_TAGS = new String[] { "return", "returns" }; + public static String PARAMETER = "parameter"; + public static String PARAMETER_TYPE = "parameter_type"; + public static String KEYWORD = "keyword"; + public static String VARIABLE = "variable"; + @Nullable public static StructuredDocString parse(String text) { if (text == null) { 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/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"); + } }