diff options
Diffstat (limited to 'python/src/com/jetbrains/python/documentation')
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; } |