diff --git a/python/src/com/jetbrains/python/codeInsight/completion/OverwriteEqualsInsertHandler.java b/python/src/com/jetbrains/python/codeInsight/completion/OverwriteEqualsInsertHandler.java new file mode 100644 index 000000000000..1fb1070c5de8 --- /dev/null +++ b/python/src/com/jetbrains/python/codeInsight/completion/OverwriteEqualsInsertHandler.java @@ -0,0 +1,41 @@ +/* + * Copyright 2000-2013 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.codeInsight.completion; + +import com.intellij.codeInsight.completion.InsertHandler; +import com.intellij.codeInsight.completion.InsertionContext; +import com.intellij.codeInsight.lookup.Lookup; +import com.intellij.codeInsight.lookup.LookupElement; +import com.intellij.openapi.editor.Document; + +/** + * @author yole + */ +public class OverwriteEqualsInsertHandler implements InsertHandler { + public static OverwriteEqualsInsertHandler INSTANCE = new OverwriteEqualsInsertHandler(); + + @Override + public void handleInsert(InsertionContext context, LookupElement item) { + if (context.getCompletionChar() != Lookup.REPLACE_SELECT_CHAR) { + return; + } + Document doc = context.getDocument(); + int tailOffset = context.getTailOffset(); + if (doc.getCharsSequence().charAt(tailOffset) == '=') { + doc.deleteString(tailOffset, tailOffset+1); + } + } +} diff --git a/python/src/com/jetbrains/python/psi/PyUtil.java b/python/src/com/jetbrains/python/psi/PyUtil.java index 1baf3c4f2871..e939857703d2 100644 --- a/python/src/com/jetbrains/python/psi/PyUtil.java +++ b/python/src/com/jetbrains/python/psi/PyUtil.java @@ -54,6 +54,7 @@ import com.intellij.util.containers.HashSet; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PyNames; import com.jetbrains.python.PyTokenTypes; +import com.jetbrains.python.codeInsight.completion.OverwriteEqualsInsertHandler; import com.jetbrains.python.codeInsight.controlflow.ScopeOwner; import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil; import com.jetbrains.python.codeInsight.stdlib.PyNamedTupleType; @@ -888,6 +889,7 @@ public class PyUtil { public static LookupElement createNamedParameterLookup(String name) { LookupElementBuilder lookupElementBuilder = LookupElementBuilder.create(name + "=").withIcon(PlatformIcons.PARAMETER_ICON); + lookupElementBuilder = lookupElementBuilder.withInsertHandler(OverwriteEqualsInsertHandler.INSTANCE); return PrioritizedLookupElement.withGrouping(lookupElementBuilder, 1); } diff --git a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java index c00e632a21eb..ccc3623adb6a 100644 --- a/python/testSrc/com/jetbrains/python/PythonCompletionTest.java +++ b/python/testSrc/com/jetbrains/python/PythonCompletionTest.java @@ -16,6 +16,7 @@ package com.jetbrains.python; import com.intellij.codeInsight.completion.impl.CamelHumpMatcher; +import com.intellij.codeInsight.lookup.Lookup; import com.intellij.codeInsight.lookup.LookupElement; import com.jetbrains.python.documentation.DocStringFormat; import com.jetbrains.python.documentation.PyDocumentationSettings; @@ -583,4 +584,15 @@ public class PythonCompletionTest extends PyTestCase { "f('foo').\n"); assertTrue(results.contains("lower")); } + + public void testOverwriteEqualsSign() { // PY-1337 + doTestByText("def foo(school=None, kiga=None): pass\n" + + "\n" + + "foo(school=None)"); + myFixture.type("sch"); + myFixture.finishLookup(Lookup.REPLACE_SELECT_CHAR); + myFixture.checkResult("def foo(school=None, kiga=None): pass\n" + + "\n" + + "foo(school=None)"); + } }