diff --git a/python/src/META-INF/python-plugin-common.xml b/python/src/META-INF/python-plugin-common.xml index 93bb7d80b240..cba9aad62010 100644 --- a/python/src/META-INF/python-plugin-common.xml +++ b/python/src/META-INF/python-plugin-common.xml @@ -71,6 +71,9 @@ + + diff --git a/python/src/com/jetbrains/python/codeInsight/PyDeclarationRangeHandler.java b/python/src/com/jetbrains/python/codeInsight/PyDeclarationRangeHandler.java new file mode 100644 index 000000000000..09f56433ea88 --- /dev/null +++ b/python/src/com/jetbrains/python/codeInsight/PyDeclarationRangeHandler.java @@ -0,0 +1,37 @@ +package com.jetbrains.python.codeInsight; + +import com.intellij.codeInsight.hint.DeclarationRangeHandler; +import com.intellij.lang.ASTNode; +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiElement; +import com.jetbrains.python.psi.PyArgumentList; +import com.jetbrains.python.psi.PyClass; +import com.jetbrains.python.psi.PyFunction; +import com.jetbrains.python.psi.PyParameterList; +import org.jetbrains.annotations.NotNull; + +/** + * @author yole + */ +public class PyDeclarationRangeHandler implements DeclarationRangeHandler { + @NotNull + @Override + public TextRange getDeclarationRange(@NotNull PsiElement container) { + int start = container.getTextRange().getStartOffset(); + if (container instanceof PyFunction) { + PyParameterList parameterList = ((PyFunction)container).getParameterList(); + return new TextRange(start, parameterList.getTextRange().getEndOffset()); + } + if (container instanceof PyClass) { + PyArgumentList argumentList = ((PyClass)container).getSuperClassExpressionList(); + if (argumentList != null) { + return new TextRange(start, argumentList.getTextRange().getEndOffset()); + } + ASTNode nameNode = ((PyClass)container).getNameNode(); + if (nameNode != null) { + return new TextRange(start, nameNode.getStartOffset() + nameNode.getTextLength()); + } + } + return container.getTextRange(); + } +}