Push down tag-related methods from StructuredDocString to StructuredDocStringBase

This commit is contained in:
Mikhail Golubev
2015-09-02 14:34:05 +03:00
parent 31c4fe5a6b
commit c9253985cc
5 changed files with 24 additions and 69 deletions
@@ -77,19 +77,6 @@ public interface StructuredDocString {
// Tags related methods
@Nullable
Substring getTagValue(String... tagNames);
@Nullable
Substring getTagValue(String tagName, @NotNull String argName);
@Nullable
Substring getTagValue(String[] tagNames, @NotNull String argName);
List<Substring> getTagArguments(String... tagNames);
@Nullable
Substring getParamByNameAndKind(@NotNull String name, String kind);
List<String> getAdditionalTags();
}
@@ -58,24 +58,25 @@ public class DocStringReferenceProvider extends PsiReferenceProvider {
final int offset = ranges.get(0).getStartOffset();
// XXX: It does not work with multielement docstrings
StructuredDocString docString = DocStringUtil.parse(text);
if (docString != null) {
if (docString instanceof StructuredDocStringBase) {
final StructuredDocStringBase taggedDocString = (StructuredDocStringBase)docString;
result.addAll(referencesFromNames(expr, offset, docString,
docString.getTagArguments(StructuredDocStringBase.PARAM_TAGS),
taggedDocString.getTagArguments(StructuredDocStringBase.PARAM_TAGS),
StructuredDocStringBase.ReferenceType.PARAMETER));
result.addAll(referencesFromNames(expr, offset, docString,
docString.getTagArguments(StructuredDocStringBase.PARAM_TYPE_TAGS),
taggedDocString.getTagArguments(StructuredDocStringBase.PARAM_TYPE_TAGS),
StructuredDocStringBase.ReferenceType.PARAMETER_TYPE));
result.addAll(referencesFromNames(expr, offset, docString,
docString.getKeywordArgumentSubstrings(), StructuredDocStringBase.ReferenceType.KEYWORD));
result.addAll(referencesFromNames(expr, offset, docString,
docString.getTagArguments("var"),
taggedDocString.getTagArguments("var"),
StructuredDocStringBase.ReferenceType.VARIABLE));
result.addAll(referencesFromNames(expr, offset, docString,
docString.getTagArguments("cvar"),
taggedDocString.getTagArguments("cvar"),
StructuredDocStringBase.ReferenceType.CLASS_VARIABLE));
result.addAll(referencesFromNames(expr, offset, docString,
docString.getTagArguments("ivar"),
taggedDocString.getTagArguments("ivar"),
StructuredDocStringBase.ReferenceType.INSTANCE_VARIABLE));
result.addAll(returnTypes(element, docString, offset));
}
@@ -160,19 +160,22 @@ public class PyStructuredDocstringFormatter {
}
}
final List<String> additionalTags = docString.getAdditionalTags();
if (!additionalTags.isEmpty()) {
result.append("<br/><br/><b>Additional:</b><br/>");
result.append("<table>");
for (String tagName : additionalTags) {
final List<Substring> args = docString.getTagArguments(tagName);
for (Substring arg : args) {
final String s = arg.toString();
result.append("<tr><td align=\"right\"><b>").append(tagName);
result.append(" ").append(s).append(":</b>");
result.append("</td><td>").append(docString.getTagValue(tagName, s)).append("</td></tr>");
if (docString instanceof StructuredDocStringBase) {
final StructuredDocStringBase taggedDocString = (StructuredDocStringBase)docString;
final List<String> additionalTags = taggedDocString.getAdditionalTags();
if (!additionalTags.isEmpty()) {
result.append("<br/><br/><b>Additional:</b><br/>");
result.append("<table>");
for (String tagName : additionalTags) {
final List<Substring> args = taggedDocString.getTagArguments(tagName);
for (Substring arg : args) {
final String s = arg.toString();
result.append("<tr><td align=\"right\"><b>").append(tagName);
result.append(" ").append(s).append(":</b>");
result.append("</td><td>").append(taggedDocString.getTagValue(tagName, s)).append("</td></tr>");
}
result.append("</table>");
}
result.append("</table>");
}
}
return result.toString();
@@ -365,40 +365,12 @@ public abstract class SectionBasedDocString implements StructuredDocString {
return null;
}
@Nullable
@Override
public Substring getTagValue(String... tagNames) {
return null;
}
@Nullable
@Override
public Substring getTagValue(String tagName, @NotNull String argName) {
return null;
}
@Nullable
@Override
public Substring getTagValue(String[] tagNames, @NotNull String argName) {
return null;
}
@Override
public List<Substring> getTagArguments(String... tagNames) {
return null;
}
@Nullable
@Override
public Substring getParamByNameAndKind(@NotNull String name, String kind) {
return null;
}
@Override
public List<String> getAdditionalTags() {
return null;
}
public static class Section {
private final String myTitle;
private final List<SectionField> myFields;
@@ -502,10 +474,4 @@ public abstract class SectionBasedDocString implements StructuredDocString {
return result;
}
}
// MethodsSection
// AttributesSection
// YieldsSection
// RaisesSection
// ReturnsSection
}
@@ -76,6 +76,8 @@ public abstract class StructuredDocStringBase implements StructuredDocString {
myDescription = builder.toString();
}
public abstract List<String> getAdditionalTags();
@Override
@NotNull
public String createParameterType(@NotNull final String name, @NotNull final String type) {
@@ -174,7 +176,6 @@ public abstract class StructuredDocStringBase implements StructuredDocString {
return result;
}
@Override
@Nullable
public Substring getTagValue(String... tagNames) {
for (String tagName : tagNames) {
@@ -186,14 +187,12 @@ public abstract class StructuredDocStringBase implements StructuredDocString {
return null;
}
@Override
@Nullable
public Substring getTagValue(String tagName, @NotNull String argName) {
final Map<Substring, Substring> argValues = myArgTagValues.get(tagName);
return argValues != null ? argValues.get(new Substring(argName)) : null;
}
@Override
@Nullable
public Substring getTagValue(String[] tagNames, @NotNull String argName) {
for (String tagName : tagNames) {
@@ -205,7 +204,6 @@ public abstract class StructuredDocStringBase implements StructuredDocString {
return null;
}
@Override
public List<Substring> getTagArguments(String... tagNames) {
for (String tagName : tagNames) {
final Map<Substring, Substring> map = myArgTagValues.get(tagName);