From a7e01b8323c00e95f94bfa4330c0da38451bd565 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Fri, 21 Feb 2014 15:59:58 +0400 Subject: [PATCH] Don't suggest Python live templates after '.' in qualified names --- .../PythonTemplateContextType.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/python/src/com/jetbrains/python/codeInsight/liveTemplates/PythonTemplateContextType.java b/python/src/com/jetbrains/python/codeInsight/liveTemplates/PythonTemplateContextType.java index d381562800fd..4ae7abebfeb1 100644 --- a/python/src/com/jetbrains/python/codeInsight/liveTemplates/PythonTemplateContextType.java +++ b/python/src/com/jetbrains/python/codeInsight/liveTemplates/PythonTemplateContextType.java @@ -16,7 +16,15 @@ package com.jetbrains.python.codeInsight.liveTemplates; import com.intellij.codeInsight.template.FileTypeBasedContextType; +import com.intellij.patterns.PsiElementPattern; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.util.ProcessingContext; +import com.jetbrains.python.PyTokenTypes; import com.jetbrains.python.PythonFileType; +import org.jetbrains.annotations.NotNull; + +import static com.intellij.patterns.PlatformPatterns.psiElement; /** * @author yole @@ -25,4 +33,22 @@ public class PythonTemplateContextType extends FileTypeBasedContextType { public PythonTemplateContextType() { super("Python", "Python", PythonFileType.INSTANCE); } + + @Override + public boolean isInContext(@NotNull PsiFile file, int offset) { + if (super.isInContext(file, offset)) { + final PsiElement element = file.findElementAt(offset); + if (element != null) { + return !isAfterDot(element); + } + } + return false; + } + + private static boolean isAfterDot(@NotNull PsiElement element) { + ProcessingContext context = new ProcessingContext(); + final PsiElementPattern.Capture capture = psiElement().afterLeafSkipping(psiElement().whitespace(), + psiElement().withElementType(PyTokenTypes.DOT)); + return capture.accepts(element, context); + } }