PY-90193 Rename PyDocstring classes and references to PyDoctest for clarity and consistency

(cherry picked from commit 94b36487487d4d6660f44e15a9a7e0c98011cea4)

IJ-MR-208617

GitOrigin-RevId: 2377cab55ffa6ac503d61dc28c482f9fc3ac3fa7
This commit is contained in:
Azim Akhmadjonov
2026-07-20 17:48:29 +00:00
committed by intellij-monorepo-bot
parent da7d48a0e1
commit 9230c29d33
31 changed files with 119 additions and 100 deletions
@@ -956,7 +956,7 @@
<documentationLinkProvider implementation="com.jetbrains.python.numpy.codeInsight.SciPyDocumentationLinkProvider"/>
<!-- PyDocstring -->
<visitorFilter language="Doctest" implementationClass="com.jetbrains.python.documentation.PyDocstringVisitorFilter"/>
<visitorFilter language="Doctest" implementationClass="com.jetbrains.python.documentation.PyDoctestVisitorFilter"/>
<visitorFilter language="Python" implementationClass="com.jetbrains.python.documentation.doctest.PyDocstringCodeBlockVisitorFilter"/>
<!-- Console -->
@@ -5,7 +5,7 @@ import com.intellij.codeInsight.lookup.LookupElement
import com.intellij.codeInsight.lookup.LookupElementBuilder
import com.intellij.lang.Language
import com.jetbrains.python.PythonLanguage
import com.jetbrains.python.documentation.doctest.PyDocstringLanguageDialect
import com.jetbrains.python.documentation.doctest.PyDoctestLanguageDialect
import org.intellij.plugins.markdown.injection.CodeFenceLanguageProvider
import java.util.Locale
@@ -20,7 +20,7 @@ import java.util.Locale
internal class PyCodeFenceLanguageProvider : CodeFenceLanguageProvider {
override fun getLanguageByInfoString(infoString: String): Language? =
when (infoString.lowercase(Locale.getDefault())) {
"pycon", "python-repl" -> PyDocstringLanguageDialect.getInstance()
"pycon", "python-repl" -> PyDoctestLanguageDialect.getInstance()
"py", "python3" -> PythonLanguage.INSTANCE
else -> null
}
@@ -29,7 +29,7 @@ internal class PyCodeFenceLanguageProvider : CodeFenceLanguageProvider {
return listOf(
LookupElementBuilder
.create("pycon")
.withIcon(PyDocstringLanguageDialect.getInstance().associatedFileType?.icon)
.withIcon(PyDoctestLanguageDialect.getInstance().associatedFileType?.icon)
.withTypeText("Python console"),
)
}
@@ -120,7 +120,7 @@
<!-- PyDocstring -->
<languageInjector implementation="com.jetbrains.python.documentation.doctest.PyDocstringLanguageInjector"/>
<lang.parserDefinition language="Doctest" implementationClass="com.jetbrains.python.documentation.doctest.PyDocstringParserDefinition"/>
<lang.parserDefinition language="Doctest" implementationClass="com.jetbrains.python.documentation.doctest.PyDoctestParserDefinition"/>
<highlightErrorFilter implementation="com.jetbrains.python.documentation.doctest.PyDocstringErrorFilter"/>
<lang.formatter language="Doctest" implementationClass="com.jetbrains.python.documentation.doctest.PyDocstringFormattingModelBuilder"/>
@@ -709,7 +709,7 @@
<!-- PyDocstring -->
<typeProvider implementation="com.jetbrains.python.documentation.docstrings.PyDocStringTypeProvider" id="pythonDocstringTypeProvider"/>
<dialectsTokenSetContributor implementation="com.jetbrains.python.documentation.doctest.PyDocstringTokenSetContributor"/>
<dialectsTokenSetContributor implementation="com.jetbrains.python.documentation.doctest.PyDoctestTokenSetContributor"/>
<!-- PyTypeRepresentation -->
<dialectsTokenSetContributor implementation="com.jetbrains.python.codeInsight.typeRepresentation.PyTypeRepresentationTokenSetContributor"/>
@@ -535,7 +535,7 @@ ACT.qualify.with.module=Qualify with an imported module
ACT.from.some.module.import=Import from…
filetype.python.docstring.description=Python docstring
filetype.python.docstring.description=Python doctest
filetype.python.function.type.annotation.description=Python PEP-484 function type comment
filetype.python.type.representation.description=Type representation language
filetype.python.type.hint.description=Python PEP-484 type hint
@@ -37,7 +37,7 @@ import com.jetbrains.python.codeInsight.controlflow.ScopeOwner;
import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil;
import com.jetbrains.python.codeInsight.mlcompletion.PyCompletionMlElementInfo;
import com.jetbrains.python.codeInsight.mlcompletion.PyCompletionMlElementKind;
import com.jetbrains.python.documentation.doctest.PyDocstringFile;
import com.jetbrains.python.documentation.doctest.PyDoctestFile;
import com.jetbrains.python.inspections.PyLazyImportInspection;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.PyAnnotation;
@@ -290,7 +290,7 @@ public final class PyKeywordCompletionContributor extends CompletionContributor
private static final PsiElementPattern.Capture<PsiElement> IN_STRING_LITERAL =
psiElement().inside(PyStringLiteralExpression.class).andNot(
psiElement().inFile(psiFile(PyDocstringFile.class)));
psiElement().inFile(psiFile(PyDoctestFile.class)));
private static final ElementPattern<PsiElement> IN_FUNCTION_HEADER =
psiElement().inside(PyFunction.class)
@@ -21,7 +21,7 @@ import com.intellij.psi.tree.IElementType;
import com.jetbrains.python.PyElementTypes;
import com.jetbrains.python.PyParsingBundle;
import com.jetbrains.python.PyTokenTypes;
import com.jetbrains.python.documentation.doctest.PyDocstringTokenTypes;
import com.jetbrains.python.documentation.doctest.PyDoctestTokenTypes;
import com.jetbrains.python.parsing.ExpressionParsing;
import com.jetbrains.python.parsing.ParsingContext;
import com.jetbrains.python.parsing.PyParser;
@@ -40,7 +40,7 @@ public class PyFunctionTypeAnnotationParser extends PyParser {
private final ExpressionParsing myExpressionParsing = new ExpressionParsing(this) {
@Override
protected IElementType getReferenceType() {
return PyDocstringTokenTypes.DOC_REFERENCE;
return PyDoctestTokenTypes.DOC_REFERENCE;
}
};
@@ -29,7 +29,7 @@ import com.jetbrains.python.codeInsight.imports.ImportLocationHelper.Companion.g
import com.jetbrains.python.codeInsight.imports.PyNestedClassUtils.findTopLevelClass
import com.jetbrains.python.codeInsight.imports.PyRelativeImportData.Companion.fromString
import com.jetbrains.python.documentation.docstrings.DocStringUtil
import com.jetbrains.python.documentation.doctest.PyDocstringFile
import com.jetbrains.python.documentation.doctest.PyDoctestFile
import com.jetbrains.python.psi.LanguageLevel
import com.jetbrains.python.psi.PyClass
import com.jetbrains.python.psi.PyElement
@@ -546,7 +546,7 @@ object AddImportHelper {
val manager = InjectedLanguageManager.getInstance(file.project)
val injectionHost = manager.getInjectionHost(file)
val insideDoctest =
file is PyDocstringFile && injectionHost != null && DocStringUtil.getParentDefinitionDocString(injectionHost) === injectionHost
file is PyDoctestFile && injectionHost != null && DocStringUtil.getParentDefinitionDocString(injectionHost) === injectionHost
val insertParent: PsiElement
if (insertBefore != null && insertBefore.parent != null) {
@@ -18,7 +18,7 @@ import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.python.PyPsiBundle;
import com.jetbrains.python.PythonUiService;
import com.jetbrains.python.documentation.doctest.PyDocstringFile;
import com.jetbrains.python.documentation.doctest.PyDoctestFile;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.PyAnnotation;
import com.jetbrains.python.psi.PyExpression;
@@ -43,7 +43,7 @@ public final class PyAnnotateTypesIntention extends PyBaseIntentionAction {
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile psiFile) {
if (!(psiFile instanceof PyFile) || psiFile instanceof PyDocstringFile) return false;
if (!(psiFile instanceof PyFile) || psiFile instanceof PyDoctestFile) return false;
final PyFunction function = findSuitableFunction(editor, psiFile);
if (function == null) return false;
@@ -21,7 +21,7 @@ import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil;
import com.jetbrains.python.codeInsight.intentions.PyTypeHintGenerationUtil.AnnotationInfo;
import com.jetbrains.python.codeInsight.intentions.PyTypeHintGenerationUtil.Pep484IncompatibleTypeException;
import com.jetbrains.python.documentation.PythonDocumentationProvider;
import com.jetbrains.python.documentation.doctest.PyDocstringFile;
import com.jetbrains.python.documentation.doctest.PyDoctestFile;
import com.jetbrains.python.psi.AccessDirection;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.PyAssignmentStatement;
@@ -74,7 +74,7 @@ public final class PyAnnotateVariableTypeIntention extends PyBaseIntentionAction
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile psiFile) {
if (!(psiFile instanceof PyFile) || psiFile instanceof PyDocstringFile) {
if (!(psiFile instanceof PyFile) || psiFile instanceof PyDoctestFile) {
return false;
}
final List<PyTargetExpression> resolved = findSuitableTargetsUnderCaret(project, editor, psiFile);
@@ -16,7 +16,7 @@ import com.jetbrains.python.documentation.PyDocumentationSettings;
import com.jetbrains.python.documentation.docstrings.DocStringFormat;
import com.jetbrains.python.documentation.docstrings.DocStringParser;
import com.jetbrains.python.documentation.docstrings.PyDocstringGenerator;
import com.jetbrains.python.documentation.doctest.PyDocstringFile;
import com.jetbrains.python.documentation.doctest.PyDoctestFile;
import com.jetbrains.python.inspections.quickfix.DocstringQuickFix;
import com.jetbrains.python.psi.PyDocStringOwner;
import com.jetbrains.python.psi.PyFile;
@@ -41,7 +41,7 @@ public final class PyGenerateDocstringIntention extends PyBaseIntentionAction {
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile psiFile) {
if (!(psiFile instanceof PyFile) || psiFile instanceof PyDocstringFile) return false;
if (!(psiFile instanceof PyFile) || psiFile instanceof PyDoctestFile) return false;
PsiElement elementAt = PyUtil.findNonWhitespaceAtOffset(psiFile, editor.getCaretModel().getOffset());
if (elementAt == null) {
return false;
@@ -11,7 +11,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.python.documentation.doctest.PyDocstringFile;
import com.jetbrains.python.documentation.doctest.PyDoctestFile;
import com.jetbrains.python.psi.PyAssignmentStatement;
import com.jetbrains.python.psi.PyCallExpression;
import com.jetbrains.python.psi.PyExpression;
@@ -40,7 +40,7 @@ public abstract class TypeIntention extends PyBaseIntentionAction {
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile psiFile) {
if (!(psiFile instanceof PyFile) || psiFile instanceof PyDocstringFile) return false;
if (!(psiFile instanceof PyFile) || psiFile instanceof PyDoctestFile) return false;
updateText(false);
if (findOnlySuitableParameter(editor, psiFile) != null) {
@@ -3,7 +3,7 @@ package com.jetbrains.python.codeInsight.typeHints;
import com.intellij.lang.SyntaxTreeBuilder;
import com.intellij.psi.tree.IElementType;
import com.jetbrains.python.documentation.doctest.PyDocstringTokenTypes;
import com.jetbrains.python.documentation.doctest.PyDoctestTokenTypes;
import com.jetbrains.python.parsing.ExpressionParsing;
import com.jetbrains.python.parsing.ParsingContext;
import com.jetbrains.python.parsing.PyParser;
@@ -20,14 +20,14 @@ class PyTypeHintParser extends PyParser {
private final @NotNull StatementParsing myStatementParsing = new StatementParsing(this) {
@Override
protected @NotNull IElementType getReferenceType() {
return PyDocstringTokenTypes.DOC_REFERENCE;
return PyDoctestTokenTypes.DOC_REFERENCE;
}
};
private final @NotNull ExpressionParsing myExpressionParsing = new ExpressionParsing(this) {
@Override
protected @NotNull IElementType getReferenceType() {
return PyDocstringTokenTypes.DOC_REFERENCE;
return PyDoctestTokenTypes.DOC_REFERENCE;
}
};
@@ -10,7 +10,7 @@ import com.jetbrains.python.psi.PythonVisitorFilter
/**
* Disables all inspections for plain Python code blocks injected inside docstrings
* Doctest fragments ([PyDocstringLanguageDialect]) are handled separately by `PyDocstringVisitorFilter`.
* Doctest fragments ([PyDoctestLanguageDialect]) are handled separately by `PyDocstringVisitorFilter`.
*/
internal class PyDocstringCodeBlockVisitorFilter : PythonVisitorFilter {
override fun isSupported(visitorClass: Class<out PyElementVisitor?>, file: PsiFile): Boolean {
@@ -34,7 +34,7 @@ public final class PyDocstringErrorFilter extends HighlightErrorFilter {
@Override
public boolean shouldHighlightErrorElement(@NotNull PsiErrorElement element) {
final PsiFile file = element.getContainingFile();
if (file instanceof PyDocstringFile) return false;
if (file instanceof PyDoctestFile) return false;
final InjectedLanguageManager manager = InjectedLanguageManager.getInstance(file.getProject());
if (manager == null) return true;
@@ -15,36 +15,14 @@
*/
package com.jetbrains.python.documentation.doctest;
import com.intellij.lang.injection.InjectedLanguageManager;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiLanguageInjectionHost;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.PyExpressionCodeFragment;
import com.jetbrains.python.psi.impl.PyFileImpl;
import org.jetbrains.annotations.NotNull;
public class PyDocstringFile extends PyFileImpl implements PyExpressionCodeFragment {
/**
* @deprecated Use {@link PyDoctestFile} instead.
*/
@Deprecated
public class PyDocstringFile extends PyDoctestFile {
public PyDocstringFile(FileViewProvider viewProvider) {
super(viewProvider, PyDocstringLanguageDialect.getInstance());
}
@Override
public @NotNull FileType getFileType() {
return PyDocstringFileType.INSTANCE;
}
@Override
public String toString() {
return "DocstringFile:" + getName();
}
@Override
public LanguageLevel getLanguageLevel() {
final InjectedLanguageManager languageManager = InjectedLanguageManager.getInstance(getProject());
final PsiLanguageInjectionHost host = languageManager.getInjectionHost(this);
if (host != null) return LanguageLevel.forElement(host.getContainingFile());
return super.getLanguageLevel();
super(viewProvider);
}
}
@@ -11,7 +11,7 @@ import com.intellij.psi.formatter.common.AbstractBlock
class PyDocstringFormattingModelBuilder : CustomFormattingModelBuilder {
override fun isEngagedToFormat(context: PsiElement): Boolean =
context.containingFile?.language == PyDocstringLanguageDialect.getInstance()
context.containingFile?.language == PyDoctestLanguageDialect.getInstance()
override fun createModel(formattingContext: FormattingContext): FormattingModel {
return DocumentBasedFormattingModel(PyDocstringBlock(formattingContext),
@@ -85,13 +85,13 @@ public class PyDocstringLanguageInjector implements LanguageInjector {
if (!trimmedString.startsWith(">>>") && !trimmedString.startsWith("...") && gotExample && start < end) {
gotExample = false;
if (!endsWithSlash) {
injectionPlacesRegistrar.addPlace(PyDocstringLanguageDialect.getInstance(), TextRange.create(start, end), null, null);
injectionPlacesRegistrar.addPlace(PyDoctestLanguageDialect.getInstance(), TextRange.create(start, end), null, null);
}
}
if (endsWithSlash && !trimmedString.endsWith("\\")) {
endsWithSlash = false;
injectionPlacesRegistrar.addPlace(PyDocstringLanguageDialect.getInstance(),
injectionPlacesRegistrar.addPlace(PyDoctestLanguageDialect.getInstance(),
TextRange.create(start, getEndOffset(currentPosition, string, maxPosition, closingQuote)), null,
null);
}
@@ -125,7 +125,7 @@ public class PyDocstringLanguageInjector implements LanguageInjector {
currentPosition += string.length();
}
if (gotExample && start < end) {
injectionPlacesRegistrar.addPlace(PyDocstringLanguageDialect.getInstance(), TextRange.create(start, end), null, null);
injectionPlacesRegistrar.addPlace(PyDoctestLanguageDialect.getInstance(), TextRange.create(start, end), null, null);
}
}
@@ -0,0 +1,41 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jetbrains.python.documentation.doctest
import com.intellij.lang.injection.InjectedLanguageManager
import com.intellij.openapi.fileTypes.FileType
import com.intellij.psi.FileViewProvider
import com.jetbrains.python.psi.LanguageLevel
import com.jetbrains.python.psi.PyExpressionCodeFragment
import com.jetbrains.python.psi.impl.PyFileImpl
open class PyDoctestFile(viewProvider: FileViewProvider?) : PyFileImpl(viewProvider, PyDoctestLanguageDialect.getInstance()),
PyExpressionCodeFragment {
override fun getFileType(): FileType {
return PyDoctestFileType.INSTANCE
}
override fun toString(): String {
return "DoctestFile:$name"
}
override fun getLanguageLevel(): LanguageLevel? {
val languageManager = InjectedLanguageManager.getInstance(project)
val host = languageManager.getInjectionHost(this)
if (host != null) return LanguageLevel.forElement(host.getContainingFile())
return super<PyExpressionCodeFragment>.getLanguageLevel()
}
}
@@ -24,11 +24,11 @@ import org.jetbrains.annotations.NotNull;
/**
* User : ktisha
*/
public class PyDocstringFileType extends PythonFileType {
public static final PythonFileType INSTANCE = new PyDocstringFileType();
public class PyDoctestFileType extends PythonFileType {
public static final PythonFileType INSTANCE = new PyDoctestFileType();
private PyDocstringFileType() {
super(new PyDocstringLanguageDialect());
private PyDoctestFileType() {
super(new PyDoctestLanguageDialect());
}
@Override
@@ -43,6 +43,6 @@ public class PyDocstringFileType extends PythonFileType {
@Override
public @NotNull String getDefaultExtension() {
return "docstring";
return "doctest";
}
}
@@ -25,13 +25,13 @@ import com.jetbrains.python.PythonLanguage;
/**
* User : ktisha
*/
public class PyDocstringLanguageDialect extends Language implements DependentLanguage, InjectableLanguage {
public class PyDoctestLanguageDialect extends Language implements DependentLanguage, InjectableLanguage {
public static PyDocstringLanguageDialect getInstance() {
return (PyDocstringLanguageDialect)PyDocstringFileType.INSTANCE.getLanguage();
public static PyDoctestLanguageDialect getInstance() {
return (PyDoctestLanguageDialect)PyDoctestFileType.INSTANCE.getLanguage();
}
protected PyDocstringLanguageDialect() {
protected PyDoctestLanguageDialect() {
super(PythonLanguage.getInstance(), PyNames.PY_DOCSTRING_ID);
putUserData(QuickEditActionKeys.EDIT_ACTION_AVAILABLE, false);
}
@@ -9,7 +9,7 @@ import com.jetbrains.python.lexer.PythonIndentingLexer;
/**
* User : ktisha
*/
public class PyDocstringLexer extends PythonIndentingLexer {
public class PyDoctestLexer extends PythonIndentingLexer {
@Override
public void advance() {
if (super.getTokenType() == PyTokenTypes.DOT) {
@@ -23,9 +23,9 @@ import com.jetbrains.python.psi.LanguageLevel;
/**
* User : ktisha
*/
public class PyDocstringParser extends PyParser {
public class PyDoctestParser extends PyParser {
@Override
protected ParsingContext createParsingContext(SyntaxTreeBuilder builder, LanguageLevel languageLevel) {
return new PyDocstringParsingContext(builder, languageLevel);
return new PyDoctestParsingContext(builder, languageLevel);
}
}
@@ -14,33 +14,33 @@ import org.jetbrains.annotations.NotNull;
/**
* User : ktisha
*/
public final class PyDocstringParserDefinition extends PythonParserDefinition {
public static final IFileElementType PYTHON_DOCSTRING_FILE = new PyDocstringFileElementType(PyDocstringLanguageDialect
public final class PyDoctestParserDefinition extends PythonParserDefinition {
public static final IFileElementType PYTHON_DOCTEST_FILE = new PyDocstringFileElementType(PyDoctestLanguageDialect
.getInstance());
@Override
public @NotNull Lexer createLexer(Project project) {
return new PyDocstringLexer();
return new PyDoctestLexer();
}
@Override
public @NotNull PsiParser createParser(Project project) {
return new PyDocstringParser();
return new PyDoctestParser();
}
@Override
public @NotNull TokenSet getWhitespaceTokens() {
return TokenSet.orSet(super.getWhitespaceTokens(), TokenSet.create(PyDocstringTokenTypes.DOTS));
return TokenSet.orSet(super.getWhitespaceTokens(), TokenSet.create(PyDoctestTokenTypes.DOTS));
}
@Override
public @NotNull IFileElementType getFileNodeType() {
return PYTHON_DOCSTRING_FILE;
return PYTHON_DOCTEST_FILE;
}
@Override
public @NotNull PsiFile createFile(@NotNull FileViewProvider viewProvider) {
return new PyDocstringFile(viewProvider);
return new PyDoctestFile(viewProvider);
}
}
@@ -28,11 +28,11 @@ import org.jetbrains.annotations.NotNull;
/**
* User : ktisha
*/
public class PyDocstringParsingContext extends ParsingContext {
public class PyDoctestParsingContext extends ParsingContext {
private final StatementParsing myStatementParser;
private final ExpressionParsing myExpressionParser;
public PyDocstringParsingContext(final SyntaxTreeBuilder builder, LanguageLevel languageLevel) {
public PyDoctestParsingContext(final SyntaxTreeBuilder builder, LanguageLevel languageLevel) {
super(builder, languageLevel);
myStatementParser = new PyDocstringStatementParsing(this);
myExpressionParser = new PyDocstringExpressionParsing(this);
@@ -55,7 +55,7 @@ public class PyDocstringParsingContext extends ParsingContext {
@Override
protected IElementType getReferenceType() {
return PyDocstringTokenTypes.DOC_REFERENCE;
return PyDoctestTokenTypes.DOC_REFERENCE;
}
}
@@ -67,13 +67,13 @@ public class PyDocstringParsingContext extends ParsingContext {
@Override
protected IElementType getReferenceType() {
return PyDocstringTokenTypes.DOC_REFERENCE;
return PyDoctestTokenTypes.DOC_REFERENCE;
}
@Override
public @NotNull IElementType filter(@NotNull IElementType source, int start, int end, @NotNull CharSequence text) {
if (source == PyTokenTypes.DOT && CharArrayUtil.regionMatches(text, start, end, "..."))
return PyDocstringTokenTypes.DOTS;
return PyDoctestTokenTypes.DOTS;
if (source == PyTokenTypes.GTGT && CharArrayUtil.regionMatches(text, start, end, ">>>"))
return PyTokenTypes.SPACE;
return super.filter(source, start, end, text);
@@ -22,16 +22,16 @@ import org.jetbrains.annotations.NotNull;
/**
* User : ktisha
*/
public final class PyDocstringTokenSetContributor extends PythonDialectsTokenSetContributorBase {
public static final TokenSet DOCSTRING_REFERENCE_EXPRESSIONS = TokenSet.create(PyDocstringTokenTypes.DOC_REFERENCE);
public final class PyDoctestTokenSetContributor extends PythonDialectsTokenSetContributorBase {
public static final TokenSet DOCTEST_REFERENCE_EXPRESSIONS = TokenSet.create(PyDoctestTokenTypes.DOC_REFERENCE);
@Override
public @NotNull TokenSet getExpressionTokens() {
return DOCSTRING_REFERENCE_EXPRESSIONS;
return DOCTEST_REFERENCE_EXPRESSIONS;
}
@Override
public @NotNull TokenSet getReferenceExpressionTokens() {
return DOCSTRING_REFERENCE_EXPRESSIONS;
return DOCTEST_REFERENCE_EXPRESSIONS;
}
}
@@ -20,10 +20,10 @@ import com.jetbrains.python.psi.PyElementType;
/**
* User : ktisha
*/
public final class PyDocstringTokenTypes {
public final class PyDoctestTokenTypes {
public static final PyElementType DOC_REFERENCE = new PyElementType("DOC_REFERENCE", node -> new PyDocReferenceExpression(node));
public static final PyElementType DOTS = new PyElementType("DOTS");
private PyDocstringTokenTypes() {
private PyDoctestTokenTypes() {
}
}
@@ -7,7 +7,7 @@ import com.intellij.psi.InjectedLanguagePlaces;
import com.intellij.psi.LanguageInjector;
import com.intellij.psi.PsiLanguageInjectionHost;
import com.intellij.restructuredtext.psi.RestLine;
import com.jetbrains.python.documentation.doctest.PyDocstringLanguageDialect;
import com.jetbrains.python.documentation.doctest.PyDoctestLanguageDialect;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -30,11 +30,11 @@ public final class PyRestDocstringLanguageInjector implements LanguageInjector {
if (!trimmedString.startsWith(">>>") && !trimmedString.startsWith("...") && gotExample && start < end) {
gotExample = false;
if (!endsWithSlash)
injectionPlacesRegistrar.addPlace(PyDocstringLanguageDialect.getInstance(), TextRange.create(start, end), null, null);
injectionPlacesRegistrar.addPlace(PyDoctestLanguageDialect.getInstance(), TextRange.create(start, end), null, null);
}
if (endsWithSlash) {
endsWithSlash = false;
injectionPlacesRegistrar.addPlace(PyDocstringLanguageDialect.getInstance(),
injectionPlacesRegistrar.addPlace(PyDoctestLanguageDialect.getInstance(),
TextRange.create(start, getEndOffset(currentPosition, string)), null, null);
}
@@ -57,7 +57,7 @@ public final class PyRestDocstringLanguageInjector implements LanguageInjector {
currentPosition += string.length();
}
if (gotExample && start < end)
injectionPlacesRegistrar.addPlace(PyDocstringLanguageDialect.getInstance(), TextRange.create(start, end), null, null);
injectionPlacesRegistrar.addPlace(PyDoctestLanguageDialect.getInstance(), TextRange.create(start, end), null, null);
}
}
@@ -29,9 +29,9 @@ import org.jetbrains.annotations.NotNull;
/**
* User : ktisha
* <p>
* filter out some python inspections and annotations if we're in docstring substitution
* filter out some python inspections and annotations if we're in doctest substitution
*/
public final class PyDocstringVisitorFilter implements PythonVisitorFilter {
public final class PyDoctestVisitorFilter implements PythonVisitorFilter {
@Override
public boolean isSupported(final @NotNull Class visitorClass, final @NotNull PsiFile file) {
//inspections
@@ -22,7 +22,7 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiLanguageInjectionHost;
import com.intellij.psi.util.PsiTreeUtil;
import com.jetbrains.python.documentation.doctest.PyDocstringParserDefinition;
import com.jetbrains.python.documentation.doctest.PyDoctestParserDefinition;
import com.jetbrains.python.fixtures.PyTestCase;
import java.util.List;
@@ -96,7 +96,7 @@ public class PyDocstringTest extends PyTestCase {
private void doTestLexer(final String text, String... expectedTokens) {
Lexer lexer = new PyDocstringParserDefinition().createLexer(myFixture.getProject());
Lexer lexer = new PyDoctestParserDefinition().createLexer(myFixture.getProject());
lexer.start(text);
int idx = 0;
while (lexer.getTokenType() != null) {
@@ -7,7 +7,7 @@ import com.jetbrains.python.codeInsight.functionTypeComments.PyFunctionTypeAnnot
import com.jetbrains.python.codeInsight.functionTypeComments.PyFunctionTypeAnnotationParserDefinition;
import com.jetbrains.python.codeInsight.functionTypeComments.psi.PyFunctionTypeAnnotation;
import com.jetbrains.python.codeInsight.functionTypeComments.psi.PyFunctionTypeAnnotationFile;
import com.jetbrains.python.documentation.doctest.PyDocstringTokenSetContributor;
import com.jetbrains.python.documentation.doctest.PyDoctestTokenSetContributor;
import com.jetbrains.python.psi.PyEllipsisLiteralExpression;
import com.jetbrains.python.psi.PyExpression;
import com.jetbrains.python.psi.PythonVisitorFilter;
@@ -32,7 +32,7 @@ public class PyFunctionTypeAnnotationParsingTest extends ParsingTestCase {
getApplication().registerService(PyElementTypesFacade.class, PyElementTypesFacadeImpl.class);
registerExtensionPoint(PythonDialectsTokenSetContributor.EP_NAME, PythonDialectsTokenSetContributor.class);
registerExtension(PythonDialectsTokenSetContributor.EP_NAME, new PythonTokenSetContributor());
registerExtension(PythonDialectsTokenSetContributor.EP_NAME, new PyDocstringTokenSetContributor());
registerExtension(PythonDialectsTokenSetContributor.EP_NAME, new PyDoctestTokenSetContributor());
addExplicitExtension(LanguageASTFactory.INSTANCE, PythonLanguage.getInstance(), new PythonASTFactory());
}
@@ -9,7 +9,7 @@ import com.jetbrains.python.codeInsight.typeRepresentation.PyTypeRepresentationP
import com.jetbrains.python.codeInsight.typeRepresentation.PyTypeRepresentationTokenSetContributor
import com.jetbrains.python.codeInsight.typeRepresentation.psi.PyFunctionTypeRepresentation
import com.jetbrains.python.codeInsight.typeRepresentation.psi.PyTypeRepresentationFile
import com.jetbrains.python.documentation.doctest.PyDocstringTokenSetContributor
import com.jetbrains.python.documentation.doctest.PyDoctestTokenSetContributor
import com.jetbrains.python.psi.PyBinaryExpression
import com.jetbrains.python.psi.PyEllipsisLiteralExpression
import com.jetbrains.python.psi.PyExpression
@@ -31,7 +31,7 @@ class PyTypeRepresentationParsingTest : ParsingTestCase("typeRepresentation/pars
registerExtensionPoint(PythonDialectsTokenSetContributor.EP_NAME,
PythonDialectsTokenSetContributor::class.java)
registerExtension(PythonDialectsTokenSetContributor.EP_NAME, PythonTokenSetContributor())
registerExtension(PythonDialectsTokenSetContributor.EP_NAME, PyDocstringTokenSetContributor())
registerExtension(PythonDialectsTokenSetContributor.EP_NAME, PyDoctestTokenSetContributor())
registerExtension(PythonDialectsTokenSetContributor.EP_NAME, PyTypeRepresentationTokenSetContributor())
addExplicitExtension(LanguageASTFactory.INSTANCE, PythonLanguage.getInstance(), PythonASTFactory())
}