From baf923eb20b84a2b0fa151102e464b33ce0443bc Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Mon, 7 Sep 2015 17:45:42 +0300 Subject: [PATCH] Don't highlight Sphinx and Epydoc tags inside Google and Numpy docstrings --- .../DocStringTagCompletionContributor.java | 19 ++++------- .../python/validation/DocStringAnnotator.java | 33 ++++++++++--------- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/python/src/com/jetbrains/python/documentation/DocStringTagCompletionContributor.java b/python/src/com/jetbrains/python/documentation/DocStringTagCompletionContributor.java index 415a66ce94f2..64ca33f267d4 100644 --- a/python/src/com/jetbrains/python/documentation/DocStringTagCompletionContributor.java +++ b/python/src/com/jetbrains/python/documentation/DocStringTagCompletionContributor.java @@ -17,8 +17,6 @@ package com.jetbrains.python.documentation; import com.intellij.codeInsight.completion.*; import com.intellij.codeInsight.lookup.LookupElementBuilder; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.patterns.PsiElementPattern; import com.intellij.psi.PsiFile; import com.intellij.util.ProcessingContext; @@ -43,19 +41,17 @@ public class DocStringTagCompletionContributor extends CompletionContributor { protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet result) { - final Module module = ModuleUtilCore.findModuleForPsiElement(parameters.getPosition()); - if (module == null) return; - final PyDocumentationSettings settings = PyDocumentationSettings.getInstance(module); final PsiFile file = parameters.getOriginalFile(); - if (settings.isEpydocFormat(file) || settings.isReSTFormat(file)) { + DocStringFormat format = DocStringUtil.getConfiguredDocStringFormat(file); + if (format == DocStringFormat.EPYTEXT || format == DocStringFormat.REST) { int offset = parameters.getOffset(); final String text = file.getText(); - char prefix = settings.isEpydocFormat(file) ? '@' : ':'; + char prefix = format == DocStringFormat.EPYTEXT ? '@' : ':'; if (offset > 0) { offset--; } StringBuilder prefixBuilder = new StringBuilder(); - while(offset > 0 && (Character.isLetterOrDigit(text.charAt(offset)) || text.charAt(offset) == prefix)) { + while (offset > 0 && (Character.isLetterOrDigit(text.charAt(offset)) || text.charAt(offset) == prefix)) { prefixBuilder.insert(0, text.charAt(offset)); if (text.charAt(offset) == prefix) { offset--; @@ -63,7 +59,7 @@ public class DocStringTagCompletionContributor extends CompletionContributor { } offset--; } - while(offset > 0) { + while (offset > 0) { offset--; if (text.charAt(offset) == '\n' || text.charAt(offset) == '\"' || text.charAt(offset) == '\'') { break; @@ -72,7 +68,7 @@ public class DocStringTagCompletionContributor extends CompletionContributor { return; } } - String[] allTags = settings.isEpydocFormat(file) ? EpydocString.ALL_TAGS : SphinxDocString.ALL_TAGS; + String[] allTags = format == DocStringFormat.EPYTEXT ? EpydocString.ALL_TAGS : SphinxDocString.ALL_TAGS; if (prefixBuilder.length() > 0) { result = result.withPrefixMatcher(prefixBuilder.toString()); } @@ -81,7 +77,6 @@ public class DocStringTagCompletionContributor extends CompletionContributor { } } } - } - ); + }); } } diff --git a/python/src/com/jetbrains/python/validation/DocStringAnnotator.java b/python/src/com/jetbrains/python/validation/DocStringAnnotator.java index 722c5d63074a..df887b56f238 100644 --- a/python/src/com/jetbrains/python/validation/DocStringAnnotator.java +++ b/python/src/com/jetbrains/python/validation/DocStringAnnotator.java @@ -16,8 +16,6 @@ package com.jetbrains.python.validation; import com.intellij.lang.annotation.Annotation; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.util.TextRange; import com.jetbrains.python.PyNames; import com.jetbrains.python.documentation.*; @@ -66,19 +64,24 @@ public class DocStringAnnotator extends PyAnnotator { private void annotateDocStringStmt(final PyStringLiteralExpression stmt) { if (stmt != null) { - final Module module = ModuleUtilCore.findModuleForPsiElement(stmt); - if (module == null) return; - final PyDocumentationSettings settings = PyDocumentationSettings.getInstance(module); - if (!settings.isPlain(stmt.getContainingFile())) { - String[] tags = settings.isEpydocFormat(stmt.getContainingFile()) ? EpydocString.ALL_TAGS : SphinxDocString.ALL_TAGS; - int pos = 0; - while(true) { - TextRange textRange = DocStringReferenceProvider.findNextTag(stmt.getText(), pos, tags); - if (textRange == null) break; - Annotation annotation = getHolder().createInfoAnnotation(textRange.shiftRight(stmt.getTextRange().getStartOffset()), null); - annotation.setTextAttributes(PyHighlighter.PY_DOC_COMMENT_TAG); - pos = textRange.getEndOffset(); - } + final DocStringFormat format = DocStringUtil.getConfiguredDocStringFormat(stmt); + final String[] tags; + if (format == DocStringFormat.EPYTEXT) { + tags = EpydocString.ALL_TAGS; + } + else if (format == DocStringFormat.REST) { + tags = SphinxDocString.ALL_TAGS; + } + else { + return; + } + int pos = 0; + while (true) { + TextRange textRange = DocStringReferenceProvider.findNextTag(stmt.getText(), pos, tags); + if (textRange == null) break; + Annotation annotation = getHolder().createInfoAnnotation(textRange.shiftRight(stmt.getTextRange().getStartOffset()), null); + annotation.setTextAttributes(PyHighlighter.PY_DOC_COMMENT_TAG); + pos = textRange.getEndOffset(); } } }