10

型推論の Ocaml/Haskell アルゴリズムを使用して、Python のより良い自動補完を提案することは可能ですか?

アイデアは、たとえば次の場合にオートコンプリートを提案することです。

class A:
  def m1(self):
    pass
  def m2(self):
    pass

a = A()
a.     <--- suggest here 'm1' and 'm2'
fun1(a)

def fun1(b):
  b.   <--- suggest here 'm1' and 'm2'

良い出発点はありますか?

4

4 に答える 4

9

ここでは、多くの指針を含む優れた議論(少し古い)。オートコンプリートの目的で型推論を積極的に試みる「プロダクション」エディターはいないと思います (ただし、たとえばウィングウェアなどはしばらく使用していないので、現在は使用している可能性があります)。

于 2009-09-25T15:40:04.507 に答える
2

Pharo Smalltalkの ECompletion と OCompletion を見ることができます。妥協点はおそらく python では異なりますが、実際には、いくつかの保守的な型推論を使用した経験に基づいた推測が機能します。また、コード/ドキュメントのブラウジングを置き換えるため、または入力を支援し、タイプミスを避けるために補完が必要かどうかによっても異なります。

Pharo では、メッセージがクラス ( SomeClass m) への明示的な送信である場合、もちろん、そのクラスとそのスーパークラスのすべてのメッセージを提案します。それ以外の場合は、入力されたプレフィックスに一致するシステム内のすべてのメソッド名を推測するだけで、うまく機能します。OCompletion は、編集履歴に基づくヒューリスティックな優先順位付けを少し追加します。

于 2009-09-29T22:45:08.377 に答える
1

適切な処理には Python の型システムが必要であり、これは興味深い研究課題です (?)。

于 2009-09-25T17:20:11.830 に答える
1

最初のケースは「簡単」で、JetBrains の PyCharmでそれができるはずです。私は PyCharm を使用したことはありませんが、Groovy ベースの開発 (動的言語) には、同じく JetBrains による IDEA を使用しており、非常に優れた、非常に積極的な自動補完機能を備えています。2 番目のケースはより難しく、IDE がfun1その用途に基づいて の型を推測する必要があります。ジェネリクスのない言語では、これは合理的かもしれません。ただし、少なくとも F# / VS2010 (ここでは OCaml/Haskell に似ている可能性が高い) では、コンパイラ / IntelliSensefun1はシグネチャ'a -> 'a(つまり、ジェネリック型を取り、ジェネリック型'aを返す関数) を持っていると推測する'aため、IntelliSense は非常にスリム。

于 2011-03-22T19:38:00.517 に答える