PY-24881 rst completion of links

This commit is contained in:
Ekaterina Tuzova
2017-07-07 14:28:20 +03:00
parent 56ac8e3d15
commit 267fe962e1
7 changed files with 47 additions and 27 deletions

View File

@@ -32,6 +32,10 @@ public class RestRefereneceCompletionTest extends RestFixtureTestCase {
doTest();
}
public void testSharp() {
doTest();
}
public void testAlreadyFilled() {
final String path = "/completion/reference/alreadyFilled.rst";
myFixture.configureByFile(path);

View File

@@ -1 +1 @@
.. note::
.. attention::

View File

@@ -1 +1 @@
.. no<caret>
.. att<caret>

View File

@@ -0,0 +1,4 @@
Note that footnotes may get
[#test]_
.. [#test]

View File

@@ -0,0 +1,4 @@
Note that footnotes may get
[#test]_
.. [#te<caret>

View File

@@ -27,6 +27,7 @@ import org.jetbrains.annotations.NotNull;
import static com.intellij.patterns.PlatformPatterns.psiElement;
import static com.intellij.patterns.StandardPatterns.or;
import static com.jetbrains.rest.completion.ReferenceCompletionContributor.getPrefix;
/**
* User : catherine
@@ -43,11 +44,15 @@ public class DirectiveCompletionContributor extends CompletionContributor {
protected void addCompletions(@NotNull CompletionParameters parameters,
ProcessingContext context,
@NotNull CompletionResultSet result) {
int offset = parameters.getOffset();
final String prefix = getPrefix(offset, parameters.getOriginalFile());
if (prefix.length() > 0) {
result = result.withPrefixMatcher(prefix);
}
for (String tag : RestUtil.getDirectives()) {
result.addElement(LookupElementBuilder.create(tag));
}
}
}
);
});
}
}

View File

@@ -69,38 +69,41 @@ public class ReferenceCompletionContributor extends CompletionContributor {
if (elements != null) {
for (RestReference e : elements) {
String name = e.getReferenceText();
if (! names.contains(name)) {
if ((name.startsWith("[") && name.endsWith("]")) ||
(name.startsWith("|") && name.endsWith("|")))
if (!names.contains(name)) {
if ((name.startsWith("[") && name.endsWith("]")) || (name.startsWith("|") && name.endsWith("|"))) {
result.addElement(LookupElementBuilder.create(name));
else if (name.equals("__"))
}
else if (name.equals("__")) {
result.addElement(LookupElementBuilder.create(name + ":"));
}
else {
if (name.startsWith("_")) name = "\\"+name;
name = name.startsWith("_") ? "\\" + name : name;
result.addElement(LookupElementBuilder.create("_" + name + ":"));
}
}
}
}
}
});
}
private String getPrefix(int offset, PsiFile file) {
if (offset > 0) {
offset--;
}
final String text = file.getText();
StringBuilder prefixBuilder = new StringBuilder();
while(offset > 0 && (Character.isLetterOrDigit(text.charAt(offset)) || text.charAt(offset) == '_'
|| text.charAt(offset) == '[') || text.charAt(offset) == '|') {
prefixBuilder.insert(0, text.charAt(offset));
if (text.charAt(offset) == '_' || text.charAt(offset) == '[' || text.charAt(offset) == '|') {
break;
}
offset--;
}
return prefixBuilder.toString();
}
}
);
public static String getPrefix(int offset, PsiFile file) {
if (offset > 0) {
offset--;
}
final String text = file.getText();
StringBuilder prefixBuilder = new StringBuilder();
while(offset > 0) {
final PsiElement element = file.findElementAt(offset);
if (element != null && element.getNode().getElementType() == RestTokenTypes.EXPLISIT_MARKUP_START)
break;
final char charAt = text.charAt(offset);
prefixBuilder.insert(0, charAt);
if (charAt == '_' || charAt == '[' || charAt == '|' || charAt == '\n') {
break;
}
offset--;
}
return prefixBuilder.toString();
}
}