From 398c5b19b2f843c4dbc62d6a6273e293e1d43db9 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 20 Sep 2013 13:15:18 +0400 Subject: [PATCH] fixed PY-8484 "Insert documentation string stub" should prompt to choose docstring format if it's currently set to plain --- .../PyGenerateDocstringIntention.java | 15 +++++++++++++- .../SpecifyTypeInDocstringIntention.java | 20 ++++++++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/python/src/com/jetbrains/python/codeInsight/intentions/PyGenerateDocstringIntention.java b/python/src/com/jetbrains/python/codeInsight/intentions/PyGenerateDocstringIntention.java index 091d62a6955c..af8951f29ae1 100644 --- a/python/src/com/jetbrains/python/codeInsight/intentions/PyGenerateDocstringIntention.java +++ b/python/src/com/jetbrains/python/codeInsight/intentions/PyGenerateDocstringIntention.java @@ -3,7 +3,10 @@ package com.jetbrains.python.codeInsight.intentions; import com.intellij.codeInsight.FileModificationService; import com.intellij.codeInsight.intention.impl.BaseIntentionAction; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.Messages; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.util.PsiTreeUtil; @@ -11,7 +14,9 @@ import com.intellij.util.IncorrectOperationException; import com.jetbrains.python.PyBundle; import com.jetbrains.python.debugger.PySignature; import com.jetbrains.python.debugger.PySignatureCacheManager; +import com.jetbrains.python.documentation.DocStringFormat; import com.jetbrains.python.documentation.PyDocstringGenerator; +import com.jetbrains.python.documentation.PyDocumentationSettings; import com.jetbrains.python.documentation.doctest.PyDocstringFile; import com.jetbrains.python.psi.PyFile; import com.jetbrains.python.psi.PyFunction; @@ -91,9 +96,17 @@ public class PyGenerateDocstringIntention extends BaseIntentionAction { } public static void generateDocstringForFunction(Project project, Editor editor, PyFunction function) { + final Module module = ModuleManager.getInstance(project).getModules()[0]; + final PyDocumentationSettings documentationSettings = PyDocumentationSettings.getInstance(module); + if (documentationSettings.isPlain(function.getContainingFile())) { + final String[] values = {DocStringFormat.EPYTEXT, DocStringFormat.REST}; + final int i = Messages.showChooseDialog("Docstring format:", "Select Docstring Type", values, DocStringFormat.EPYTEXT, null); + if (i < 0) return; + final String value = values[i]; + documentationSettings.setFormat(value); + } PyDocstringGenerator docstringGenerator = new PyDocstringGenerator(function).withSignatures(); - if (function.getDocStringValue() == null) { docstringGenerator.withReturn(); } diff --git a/python/src/com/jetbrains/python/codeInsight/intentions/SpecifyTypeInDocstringIntention.java b/python/src/com/jetbrains/python/codeInsight/intentions/SpecifyTypeInDocstringIntention.java index 6837b66fa92a..6df523c674cf 100644 --- a/python/src/com/jetbrains/python/codeInsight/intentions/SpecifyTypeInDocstringIntention.java +++ b/python/src/com/jetbrains/python/codeInsight/intentions/SpecifyTypeInDocstringIntention.java @@ -1,7 +1,10 @@ package com.jetbrains.python.codeInsight.intentions; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -11,7 +14,9 @@ import com.intellij.util.IncorrectOperationException; import com.jetbrains.python.PyBundle; import com.jetbrains.python.debugger.PySignature; import com.jetbrains.python.debugger.PySignatureCacheManager; +import com.jetbrains.python.documentation.DocStringFormat; import com.jetbrains.python.documentation.PyDocstringGenerator; +import com.jetbrains.python.documentation.PyDocumentationSettings; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.NotNull; @@ -50,16 +55,16 @@ public class SpecifyTypeInDocstringIntention extends TypeIntention { callable = getCallable(elementAt); } if (callable instanceof PyFunction) { - generateDocstring(kind, (PyFunction)callable, problemElement); + generateDocstring(kind, (PyFunction)callable, problemElement, editor); } } private static void generateDocstring(String kind, PyFunction pyFunction, - PyExpression problemElement) { + PyExpression problemElement, Editor editor) { String name = "rtype".equals(kind) ? "" : StringUtil.notNullize(problemElement.getName()); - PyDocstringGenerator docstringGenerator = new PyDocstringGenerator(pyFunction); + final PyDocstringGenerator docstringGenerator = new PyDocstringGenerator(pyFunction); PySignature signature = PySignatureCacheManager.getInstance(pyFunction.getProject()).findSignature(pyFunction); if (signature != null) { @@ -69,6 +74,15 @@ public class SpecifyTypeInDocstringIntention extends TypeIntention { docstringGenerator.withParam(kind, name); } + final Module module = ModuleManager.getInstance(pyFunction.getProject()).getModules()[0]; + final PyDocumentationSettings documentationSettings = PyDocumentationSettings.getInstance(module); + if (documentationSettings.isPlain(pyFunction.getContainingFile())) { + final String[] values = {DocStringFormat.EPYTEXT, DocStringFormat.REST}; + final int i = Messages.showChooseDialog("Docstring format:", "Select Docstring Type", values, DocStringFormat.EPYTEXT, null); + if (i < 0) return; + final String value = values[i]; + documentationSettings.setFormat(value); + } docstringGenerator.build(); docstringGenerator.startTemplate(); }