summaryrefslogtreecommitdiff
path: root/python/src/com/jetbrains/python/documentation
diff options
context:
space:
mode:
Diffstat (limited to 'python/src/com/jetbrains/python/documentation')
-rw-r--r--python/src/com/jetbrains/python/documentation/EpydocString.java7
-rw-r--r--python/src/com/jetbrains/python/documentation/PyDocstringGenerator.java11
-rw-r--r--python/src/com/jetbrains/python/documentation/PyDocumentationSettings.java24
-rw-r--r--python/src/com/jetbrains/python/documentation/SphinxDocString.java9
-rw-r--r--python/src/com/jetbrains/python/documentation/StructuredDocStringBase.java26
5 files changed, 58 insertions, 19 deletions
diff --git a/python/src/com/jetbrains/python/documentation/EpydocString.java b/python/src/com/jetbrains/python/documentation/EpydocString.java
index 132ef4924b5c..3d0fc3e89d9e 100644
--- a/python/src/com/jetbrains/python/documentation/EpydocString.java
+++ b/python/src/com/jetbrains/python/documentation/EpydocString.java
@@ -44,6 +44,13 @@ public class EpydocString extends StructuredDocStringBase {
"precondition", "postcondition", "invariant", "author", "organization", "copyright", "license", "contact", "summary", "see"
};
+ /**
+ * Empty doc (for {@link #createParameterType(String, String)} probably)
+ */
+ public EpydocString() {
+ this("");
+ }
+
public EpydocString(@NotNull String docstringText) {
super(docstringText, "@");
}
diff --git a/python/src/com/jetbrains/python/documentation/PyDocstringGenerator.java b/python/src/com/jetbrains/python/documentation/PyDocstringGenerator.java
index d09af58f4fc3..c05069098ea6 100644
--- a/python/src/com/jetbrains/python/documentation/PyDocstringGenerator.java
+++ b/python/src/com/jetbrains/python/documentation/PyDocstringGenerator.java
@@ -87,8 +87,6 @@ public class PyDocstringGenerator {
for (PyParameter functionParam : function.getParameterList().getParameters()) {
String paramName = functionParam.getName();
if (!functionParam.isSelf() && !StringUtil.isEmpty(paramName)) {
- assert paramName != null;
-
String type = signature != null ? signature.getArgTypeQualifiedName(paramName) : null;
if (type != null) {
@@ -140,12 +138,9 @@ public class PyDocstringGenerator {
final VirtualFile virtualFile = myFile.getVirtualFile();
if (virtualFile == null) return;
- OpenFileDescriptor descriptor = new OpenFileDescriptor(
- myProject, virtualFile, myDocStringOwner.getTextOffset() + myDocStringOwner.getTextLength()
- );
+ OpenFileDescriptor descriptor = new OpenFileDescriptor(myProject, virtualFile, myDocStringExpression.getTextOffset());
Editor targetEditor = FileEditorManager.getInstance(myProject).openTextEditor(descriptor, true);
if (targetEditor != null) {
- targetEditor.getCaretModel().moveToOffset(myDocStringExpression.getTextOffset());
TemplateManager.getInstance(myProject).startTemplate(targetEditor, template);
}
}
@@ -298,7 +293,7 @@ public class PyDocstringGenerator {
if (myDocStringOwner instanceof PyFunction) {
final PyStatementList statementList = ((PyFunction)myDocStringOwner).getStatementList();
final Document document = PsiDocumentManager.getInstance(myProject).getDocument(getFile());
- if (document != null && statementList != null && myFunction != null && statementList.getStatements().length != 0
+ if (document != null && myFunction != null && statementList.getStatements().length != 0
&& document.getLineNumber(statementList.getTextOffset()) != document.getLineNumber(myFunction.getTextOffset())) {
whitespace = PsiTreeUtil.getPrevSiblingOfType(statementList, PsiWhiteSpace.class);
}
@@ -411,7 +406,7 @@ public class PyDocstringGenerator {
final PyStatementList list = myFunction.getStatementList();
final Document document = PsiDocumentManager.getInstance(myProject).getDocument(getFile());
- if (document != null && list != null) {
+ if (document != null) {
if (document.getLineNumber(list.getTextOffset()) == document.getLineNumber(myFunction.getTextOffset()) ||
list.getStatements().length == 0) {
PyFunction func = elementGenerator.createFromText(LanguageLevel.forElement(myFunction),
diff --git a/python/src/com/jetbrains/python/documentation/PyDocumentationSettings.java b/python/src/com/jetbrains/python/documentation/PyDocumentationSettings.java
index 6ea65405ba1a..49a17efd28a6 100644
--- a/python/src/com/jetbrains/python/documentation/PyDocumentationSettings.java
+++ b/python/src/com/jetbrains/python/documentation/PyDocumentationSettings.java
@@ -15,7 +15,9 @@
*/
package com.jetbrains.python.documentation;
-import com.intellij.openapi.components.*;
+import com.intellij.openapi.components.PersistentStateComponent;
+import com.intellij.openapi.components.State;
+import com.intellij.openapi.components.Storage;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleServiceManager;
import com.intellij.openapi.util.text.StringUtil;
@@ -27,6 +29,7 @@ import com.jetbrains.python.psi.PyFile;
import com.jetbrains.python.psi.PyTargetExpression;
import com.jetbrains.python.psi.impl.PyPsiUtils;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.util.List;
@@ -54,7 +57,7 @@ public class PyDocumentationSettings implements PersistentStateComponent<PyDocum
private boolean isFormat(PsiFile file, final String format) {
if (file instanceof PyFile) {
- PyTargetExpression expr = ((PyFile) file).findTopLevelAttribute(PyNames.DOCFORMAT);
+ PyTargetExpression expr = ((PyFile)file).findTopLevelAttribute(PyNames.DOCFORMAT);
if (expr != null) {
String docformat = PyPsiUtils.strValue(expr.findAssignedValue());
if (docformat != null) {
@@ -88,4 +91,21 @@ public class PyDocumentationSettings implements PersistentStateComponent<PyDocum
public void loadState(PyDocumentationSettings state) {
XmlSerializerUtil.copyBean(state, this);
}
+
+ /**
+ * TODO: Use this factory for the whole document infrastructure to simplify new documentation engine support
+ * Factory that returns appropriate instance of {@link StructuredDocStringBase} if specificed
+ *
+ * @return instance or null if no doctype os set
+ */
+ @Nullable
+ public StructuredDocStringBase getDocString() {
+ if (myDocStringFormat.equals(DocStringFormat.EPYTEXT)) {
+ return new EpydocString();
+ }
+ if (myDocStringFormat.equals(DocStringFormat.REST)) {
+ return new SphinxDocString();
+ }
+ return null;
+ }
}
diff --git a/python/src/com/jetbrains/python/documentation/SphinxDocString.java b/python/src/com/jetbrains/python/documentation/SphinxDocString.java
index ae5c7056a90b..c04e1c9471cf 100644
--- a/python/src/com/jetbrains/python/documentation/SphinxDocString.java
+++ b/python/src/com/jetbrains/python/documentation/SphinxDocString.java
@@ -31,7 +31,14 @@ public class SphinxDocString extends StructuredDocStringBase {
":type", ":raise", ":raises", ":var", ":cvar", ":ivar",
":return", ":returns", ":rtype", ":except", ":exception" };
- public SphinxDocString(@NotNull String docstringText) {
+ /**
+ * Empty doc (for {@link #createParameterType(String, String)} probably)
+ */
+ public SphinxDocString() {
+ this("");
+ }
+
+ public SphinxDocString(@NotNull final String docstringText) {
super(docstringText, ":");
}
diff --git a/python/src/com/jetbrains/python/documentation/StructuredDocStringBase.java b/python/src/com/jetbrains/python/documentation/StructuredDocStringBase.java
index 9f6cecba7a84..36b70ec0f76a 100644
--- a/python/src/com/jetbrains/python/documentation/StructuredDocStringBase.java
+++ b/python/src/com/jetbrains/python/documentation/StructuredDocStringBase.java
@@ -43,18 +43,21 @@ public abstract class StructuredDocStringBase implements StructuredDocString {
private static final Pattern RE_LOOSE_TAG_LINE = Pattern.compile("([a-z]+) ([a-zA-Z_0-9]*):?([^:]*)");
private static final Pattern RE_ARG_TYPE = Pattern.compile("(.*) ([a-zA-Z_0-9]+)");
- public static String[] PARAM_TAGS = new String[] { "param", "parameter", "arg", "argument" };
- public static String[] PARAM_TYPE_TAGS = new String[] { "type" };
- public static String[] VARIABLE_TAGS = new String[] { "ivar", "cvar", "var" };
+ public static String[] PARAM_TAGS = new String[]{"param", "parameter", "arg", "argument"};
+ public static String[] PARAM_TYPE_TAGS = new String[]{"type"};
+ public static String[] VARIABLE_TAGS = new String[]{"ivar", "cvar", "var"};
- public static String[] RAISES_TAGS = new String[] { "raises", "raise", "except", "exception" };
- public static String[] RETURN_TAGS = new String[] { "return", "returns" };
+ public static String[] RAISES_TAGS = new String[]{"raises", "raise", "except", "exception"};
+ public static String[] RETURN_TAGS = new String[]{"return", "returns"};
+ @NotNull
+ private final String myTagPrefix;
public enum ReferenceType {PARAMETER, PARAMETER_TYPE, KEYWORD, VARIABLE, CLASS_VARIABLE, INSTANCE_VARIABLE}
public static String TYPE = "type";
protected StructuredDocStringBase(@NotNull String docStringText, String tagPrefix) {
+ myTagPrefix = tagPrefix;
final Substring docString = new Substring(docStringText);
final List<Substring> lines = docString.splitLines();
final int nlines = lines.size();
@@ -74,6 +77,12 @@ public abstract class StructuredDocStringBase implements StructuredDocString {
}
@Override
+ @NotNull
+ public String createParameterType(@NotNull final String name, @NotNull final String type) {
+ return myTagPrefix + TYPE + String.format(" %s %s", name, type);
+ }
+
+ @Override
public String getDescription() {
return myDescription;
}
@@ -82,8 +91,9 @@ public abstract class StructuredDocStringBase implements StructuredDocString {
public String getSummary() {
final List<String> strings = StringUtil.split(StringUtil.trimLeading(myDescription), "\n", true, false);
if (strings.size() > 1) {
- if (strings.get(1).isEmpty())
+ if (strings.get(1).isEmpty()) {
return strings.get(0);
+ }
}
return "";
}
@@ -216,8 +226,8 @@ public abstract class StructuredDocStringBase implements StructuredDocString {
@Override
@Nullable
- public Substring getParamByNameAndKind(@NotNull String name, String kind) {
- for (Substring s: getTagArguments(kind)) {
+ public Substring getParamByNameAndKind(@NotNull String name, String kind) {
+ for (Substring s : getTagArguments(kind)) {
if (name.equals(s.getValue())) {
return s;
}