Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
小 白蛋
Intellij Community
Commits
c34c534d
Commit
c34c534d
authored
7 years ago
by
Ilya.Kazakevich
Browse files
Options
Download
Email Patches
Plain Diff
PY-27180: Unify API for method contribution, provide "clean_" method for forms
parent
e7f4e292
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
python/src/com/jetbrains/python/codeInsight/completion/PyMethodNamesCompletionContributor.java
+40
-15
...nsight/completion/PyMethodNamesCompletionContributor.java
python/src/com/jetbrains/python/codeInsight/completion/PySpecialMethodNamesCompletionContributor.kt
+13
-0
...t/completion/PySpecialMethodNamesCompletionContributor.kt
with
53 additions
and
15 deletions
+53
-15
python/src/com/jetbrains/python/codeInsight/completion/Py
Special
MethodNamesCompletionContributor.java
→
python/src/com/jetbrains/python/codeInsight/completion/PyMethodNamesCompletionContributor.java
+
40
-
15
View file @
c34c534d
...
...
@@ -20,25 +20,26 @@ import com.intellij.codeInsight.completion.*;
import
com.intellij.codeInsight.lookup.LookupElement
;
import
com.intellij.codeInsight.lookup.LookupElementBuilder
;
import
com.intellij.codeInsight.lookup.TailTypeDecorator
;
import
com.intellij.openapi.util.Pair
;
import
com.intellij.util.ObjectUtils
;
import
com.intellij.util.ProcessingContext
;
import
com.jetbrains.python.PyNames
;
import
com.jetbrains.python.PythonLanguage
;
import
com.jetbrains.python.
psi.LanguageLeve
l
;
import
com.jetbrains.python.
codeInsight.dataflow.scope.ScopeUti
l
;
import
com.jetbrains.python.psi.PyClass
;
import
com.jetbrains.python.psi.PyFunction
;
import
com.jetbrains.python.psi.types.TypeEvalContext
;
import
icons.PythonIcons
;
import
org.jetbrains.annotations.NotNull
;
import
java.util.Map
;
import
static
com
.
intellij
.
patterns
.
PlatformPatterns
.
psiElement
;
/**
* Co
mpletes predefined
method names
like __str__
* Co
ntributes
method names
to class
* User: dcheryasov
* @author Ilya.Kazakevich
* Date: Dec 3, 2009 10:06:12 AM
*/
public
class
Py
Special
MethodNamesCompletionContributor
extends
CompletionContributor
{
public
abstract
class
PyMethodNamesCompletionContributor
extends
CompletionContributor
{
@Override
public
AutoCompletionDecision
handleAutoCompletionPossibility
(
@NotNull
AutoCompletionContext
context
)
{
// auto-insert the obvious only case; else show other cases.
...
...
@@ -49,26 +50,50 @@ public class PySpecialMethodNamesCompletionContributor extends CompletionContrib
return
AutoCompletionDecision
.
SHOW_LOOKUP
;
}
public
PySpecialMethodNamesCompletionContributor
()
{
/**
* @return method_name, (arguments)
*/
@NotNull
protected
abstract
Iterable
<
Pair
<
String
,
String
>>
getCompletions
(
@NotNull
final
PyClass
aClass
,
@NotNull
final
TypeEvalContext
context
);
protected
PyMethodNamesCompletionContributor
()
{
extend
(
CompletionType
.
BASIC
,
psiElement
()
.
withLanguage
(
PythonLanguage
.
getInstance
())
.
and
(
psiElement
().
inside
(
psiElement
(
PyFunction
.
class
).
inside
(
psiElement
(
PyClass
.
class
))))
.
and
(
psiElement
().
afterLeaf
(
"def"
))
,
,
new
CompletionProvider
<
CompletionParameters
>()
{
@Override
protected
void
addCompletions
(
@NotNull
final
CompletionParameters
parameters
,
final
ProcessingContext
context
,
@NotNull
final
CompletionResultSet
result
)
{
LanguageLevel
languageLevel
=
LanguageLevel
.
forElement
(
parameters
.
getOriginalFile
());
for
(
Map
.
Entry
<
String
,
PyNames
.
BuiltinDescription
>
entry:
PyNames
.
getBuiltinMethods
(
languageLevel
).
entrySet
())
{
LookupElementBuilder
item
=
LookupElementBuilder
.
create
(
entry
.
getKey
()
+
entry
.
getValue
().
getSignature
())
.
bold
()
final
PyFunction
method
=
ObjectUtils
.
tryCast
(
ScopeUtil
.
getScopeOwner
(
parameters
.
getPosition
()),
PyFunction
.
class
);
if
(
method
==
null
)
{
return
;
}
final
PyClass
pyClass
=
method
.
getContainingClass
();
if
(
pyClass
==
null
)
{
return
;
}
final
TypeEvalContext
typeEvalContext
=
TypeEvalContext
.
codeCompletion
(
pyClass
.
getProject
(),
parameters
.
getOriginalFile
());
for
(
final
Pair
<
String
,
String
>
signature
:
getCompletions
(
pyClass
,
typeEvalContext
))
{
final
String
name
=
signature
.
first
;
if
(
pyClass
.
findMethodByName
(
name
,
false
,
typeEvalContext
)
!=
null
)
{
continue
;
}
final
String
parentheses
=
signature
.
second
;
final
LookupElementBuilder
item
=
LookupElementBuilder
.
create
(
name
+
parentheses
)
.
withTypeText
(
"predefined"
)
.
withIcon
(
PythonIcons
.
Python
.
Nodes
.
Cyan_dot
)
;
.
withIcon
(
PythonIcons
.
Python
.
Nodes
.
Cyan_dot
);
result
.
addElement
(
TailTypeDecorator
.
withTail
(
item
,
TailType
.
CASE_COLON
));
}
}
...
...
This diff is collapsed.
Click to expand it.
python/src/com/jetbrains/python/codeInsight/completion/PySpecialMethodNamesCompletionContributor.kt
0 → 100644
+
13
-
0
View file @
c34c534d
// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package
com.jetbrains.python.codeInsight.completion
import
com.intellij.openapi.util.Pair
import
com.jetbrains.python.PyNames
import
com.jetbrains.python.psi.LanguageLevel
import
com.jetbrains.python.psi.PyClass
import
com.jetbrains.python.psi.types.TypeEvalContext
class
PySpecialMethodNamesCompletionContributor
:
PyMethodNamesCompletionContributor
()
{
override
fun
getCompletions
(
aClass
:
PyClass
,
context
:
TypeEvalContext
)
=
PyNames
.
getBuiltinMethods
(
LanguageLevel
.
forElement
(
aClass
)).
map
{
Pair
(
it
.
key
,
it
.
value
.
signature
)
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help