2013-01-08 27 views
4

阅读SRC \服务代码后,似乎这是一个界面语言服务的任何主机必须满足:实现一个语言服务的主机

// 
// Public interface of the host of a language service instance. 
// 
export interface ILanguageServiceHost extends TypeScript.ILogger { 
    getCompilationSettings(): TypeScript.CompilationSettings; 
    getScriptCount(): number; 
    getScriptId(scriptIndex: number): string; 
    getScriptSourceText(scriptIndex: number, start: number, end: number): string; 
    getScriptSourceLength(scriptIndex: number): number; 
    getScriptIsResident(scriptIndex: number): bool; 
    getScriptVersion(scriptIndex: number): number; 
    getScriptEditRangeSinceVersion(scriptIndex: number, scriptVersion: number): TypeScript.ScriptEditRange; 
} 

我一直没能找到任何文件或样品,虽然有些方法是不言自明的,有些则没有,主要是:

getScriptId() 
getScriptIsResident() 
getScriptVersion() 
getScriptEditRangeSinceVersion() 

是语言服务API准备就绪?有人能简单地解释上述方法的目的吗?

+0

我以@RyanCavanaugh为依归! – Fenton

回答

5

声明:托管API的语言服务将在未来的版本中发生变化。我不确定这些变化的全部程度如何 - 我预计事情将大致相同,但几乎肯定会发生突变。

另外,您可以参考的语言服务单元测试中使用的src\harness\harness.ts托管API的完整TypeScript实现。下面是你列出的功能的概念细分:

getScriptId()

你需要返回一个字符串,它是每个文件(脚本)唯一的,但是从调用从调用不会改变。返回脚本的文件名将很好地工作。

getScriptIsResident()

编译器有一个“驻留”文件,该文件是不可变的(例如,lib.d.ts)的概念。驻留状态用于性能方面的原因 - 例如,来自常驻文件的类型被认为是不可变的(这就是为什么当您尝试扩展在lib.d.ts中定义的类型时,您在Visual Studio中看到了奇怪的原因)。您可以在此安全地返回所有文件的false,或者如果您知道文件是不可变的,则可以返回true。一旦改进的类型检查器联机,“居民”文件的概念将在未来版本的编译器中消失。

getScriptVersion()

在这里,你需要返回递增的单调递增数时的脚本修改的源文本。语言服务使用这个数字来确定它是否应该对文件进行重新分析/重新查询。

getScriptEditRangeSinceVersion()

这个函数应该返回现在已经和指定的先前版本号(见上getScriptVersion)之间发生的编辑范围的列表(希望不言自明)。显然这实施起来有点痛苦,但这里允许返回TypeScript.ScriptEditRange.unknown(),此时语言服务将对文件进行完整的重新分析(重要的性能影响,因此请尽量在交互式上下文中谨慎操作)。

+1

+1来救援:) – Fenton