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,但我确实使用了同样由 JetBrains 出品的 IDEA,用于基于 Groovy 的开发(一种动态语言),它具有非常好的、非常激进的自动完成功能。第二种情况会更困难,您希望 IDEfun1根据其用途推断类型。在没有泛型的语言中,这可能是合理的。但是,至少在 F#/VS2010 中(可能类似于此处的 OCaml/Haskell),编译器/IntelliSense 推断fun1具有签名'a -> 'a(即,采用泛型类型'a并返回泛型类型的函数'a),因此 IntelliSense 是很苗条。

于 2011-03-22T19:38:00.517 回答