From d84a93525e81cb8bb46b3c1f299c4ff9f1c6c2c0 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Mon, 6 Aug 2018 22:00:31 +0300 Subject: [PATCH] PY-31033 Render parameter default values in Quick Documentation At the moment we render them "as is" only escaping their text similarly to how it's done for TypeScript, not trimming it to the first line as in case of target expression initializers. --- .../python/documentation/PythonDocumentationProvider.java | 6 ++++++ python/testData/quickdoc/DefaultValues.html | 4 ++++ python/testData/quickdoc/DefaultValues.py | 5 +++++ python/testData/quickdoc/NumPyOnesDoc.html | 2 +- python/testData/quickdoc/OptionalParameterType.html | 4 ++-- python/testSrc/com/jetbrains/python/PyQuickDocTest.java | 6 ++++++ 6 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 python/testData/quickdoc/DefaultValues.html create mode 100644 python/testData/quickdoc/DefaultValues.py diff --git a/python/src/com/jetbrains/python/documentation/PythonDocumentationProvider.java b/python/src/com/jetbrains/python/documentation/PythonDocumentationProvider.java index e1c62ce172cc..99f483df8e61 100644 --- a/python/src/com/jetbrains/python/documentation/PythonDocumentationProvider.java +++ b/python/src/com/jetbrains/python/documentation/PythonDocumentationProvider.java @@ -283,6 +283,12 @@ public class PythonDocumentationProvider extends AbstractDocumentationProvider i result.append(": "); result.append(formatTypeWithLinks(paramType, function, context)); } + final String defaultValue = parameter.getDefaultValueText(); + if (defaultValue != null) { + // According to PEP 8 equal sign should be surrounded by spaces if annotation is present + result.append(showType ? " = " : "="); + result.append(escaped(defaultValue)); + } first = false; } diff --git a/python/testData/quickdoc/DefaultValues.html b/python/testData/quickdoc/DefaultValues.html new file mode 100644 index 000000000000..6e3d079f96e6 --- /dev/null +++ b/python/testData/quickdoc/DefaultValues.html @@ -0,0 +1,4 @@ +
DefaultValues.C
def method(self=42, + foo: List[int] = [1, + 2], + bar: str = "<br/>") -> None
\ No newline at end of file diff --git a/python/testData/quickdoc/DefaultValues.py b/python/testData/quickdoc/DefaultValues.py new file mode 100644 index 000000000000..02bbe0d97fd8 --- /dev/null +++ b/python/testData/quickdoc/DefaultValues.py @@ -0,0 +1,5 @@ +class C: + def method(self=42, foo=[1, + 2], + bar="
"): + pass diff --git a/python/testData/quickdoc/NumPyOnesDoc.html b/python/testData/quickdoc/NumPyOnesDoc.html index 24d2bdb1c1e2..142c11ce2d00 100644 --- a/python/testData/quickdoc/NumPyOnesDoc.html +++ b/python/testData/quickdoc/NumPyOnesDoc.html @@ -1,3 +1,3 @@ -def ones(shape: Union[int, Iterable[int]], dtype: Optional[object], order: Optional[str]) -> ndarray +def ones(shape: Union[int, Iterable[int]], dtype: Optional[object] = None, order: Optional[str] = 'C') -> ndarray **Test docstring** Return a new array of given shape and type, filled with ones. \ No newline at end of file diff --git a/python/testData/quickdoc/OptionalParameterType.html b/python/testData/quickdoc/OptionalParameterType.html index aa353ddcbf5c..371ed817a36d 100644 --- a/python/testData/quickdoc/OptionalParameterType.html +++ b/python/testData/quickdoc/OptionalParameterType.html @@ -1,2 +1,2 @@ -
OptionalParameterType
def open(encoding: Optional[str], - errors: Optional[str]) -> None
\ No newline at end of file +
OptionalParameterType
def open(encoding: Optional[str] = None, + errors: Optional[str] = None) -> None
\ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyQuickDocTest.java b/python/testSrc/com/jetbrains/python/PyQuickDocTest.java index 20444060e131..750cb26a2a25 100644 --- a/python/testSrc/com/jetbrains/python/PyQuickDocTest.java +++ b/python/testSrc/com/jetbrains/python/PyQuickDocTest.java @@ -69,6 +69,7 @@ public class PyQuickDocTest extends LightMarkedTestCase { private void checkHTMLOnly() { final Map marks = loadTest(); final PsiElement originalElement = marks.get(""); + assertNotNull(" marker is missing in test data", originalElement); final DocumentationManager manager = DocumentationManager.getInstance(myFixture.getProject()); final PsiElement target = manager.findTargetElement(myFixture.getEditor(), originalElement.getTextOffset(), @@ -566,6 +567,11 @@ public class PyQuickDocTest extends LightMarkedTestCase { checkHTMLOnly(); } + // PY-31033 + public void testDefaultValues() { + checkHTMLOnly(); + } + @Override protected String getTestDataPath() { return super.getTestDataPath() + "/quickdoc/";