标签: languageservice

如何创建在Visual Studio中使用的新语言

我想写一个新的模板语言,我希望Visual Studio"支持"它.我需要知道的是:

  1. 我如何解析我的新语言?
    在我的新模板语言中给出了一些代码,我该如何将其翻译成HTML?现在我正在使用正则表达式通过令牌解析它令牌,但我不认为随着语言变得更加复杂,这将无法扩展,并且没有错误检查.我听说过ANTLR,但从未使用它.这是否适合这项工作,或者是否有更简单的工具?理想情况下,我想将错误窗口中的任何语法错误发送到尽可能多的信息(行#,错误类型),就像其他语言一样.
  2. 如何为Visual Studio创建新的文件类型?
  3. 如何获得语法高亮?
    我可以使用我在步骤1中创建的相同解析器,还是这个完全不同?
  4. 我如何获得智能感知?

我更喜欢用C#编写我的解析器.

c# parsing visual-studio languageservice

102
推荐指数
3
解决办法
3万
查看次数

如何在Visual Studio编辑器中使用投影缓冲区来支持嵌入式语言

在此链接的第一段末尾,它指出:

Visual Studio文本概述功能是通过使用投影缓冲区来隐藏折叠文本来实现的,而ASP.NET页面的Visual Studio编辑器使用投影来支持嵌入式语言,如Visual Basic和C#.

我已经搜索和搜索但是没有找到任何示例或文档来完成此任务,有没有人知道这是如何完成的?我已经进行了分类工作并创建了一个我想要归类为C#代码的跨度的投影缓冲区.我将缓冲区上下文类型设置为"CSharp",但跨度从未被分类.我也尝试将我的内容类型设置为"投影",但现在也可以.

c# visual-studio languageservice

12
推荐指数
3
解决办法
1256
查看次数

停止intellisense会话提前结束

我创建了一个Visual Studio扩展,通过继承Microsoft.VisualStudio.Language.Intellisense.ICompletionSource,为我的特定于域的语言提供智能感知.

除了我的语言的关键字中的有效字符是下划线'_'之外,这样做没问题.

当intellisense弹出打开时,您可以开始输入并且智能感知框的内容将被过滤,以显示那些以您键入的内容开头的项目.

但是,如果用户键入下划线,似乎以特殊方式处理,而不是继续过滤可用的智能感知项列表,它将提交当前项并结束智能感知会话.

有没有办法停止这种行为,以便下划线可以被视为与常规字母数字字符相同?

languageservice visual-studio-extensions visual-studio-2015

10
推荐指数
1
解决办法
373
查看次数

Visual Studio 2010可扩展性,MPF和语言服务

我正在尝试扩展Visual Studio 2010 RC以便能够使用自定义编程语言.

我尝试做的前两件事是语法高亮/ Intellisense功能(很容易完成,感谢来自PDC09的"Ook!"样本)以及创建新项目模板的可能性(即能够打开*.myproj文件) .

对于第二个任务,我找不到任何简单的教程或示例.大多数示例适用于Visual Studio 2008(与IronPython集成)或甚至VS2003.可用于VS2010的少量样本不起作用(包括MPFProj)或不编译,并且太难理解.

是否有任何易于理解的示例,使用MPFProj或独立解决方案,展示如何在Visual Studio 2010中集成自定义语言的模板?

visual-studio-2010 mpf languageservice vs-extensibility

8
推荐指数
1
解决办法
2755
查看次数

在自定义Visual Studio语言服务中支持用户指定的文件扩展名

我正在开发一个自定义的Visual Studio语言服务,并且有几个关于文件扩展名绑定到特定语言服务的方式的问题.

"示例语言"语言的源文件有两个主文件扩展名:.e1.e2.我的分机有一类ExampleLanguagePackage延伸Package.

  1. 当您使用文件→打开命令并选择一个C#文件(例如)时,"打开"按钮有一个下拉箭头,您可以选择"打开方式...".单击该按钮时,将显示"CSharp Editor(默认)","带编码的CSharp Editor"或任何其他选项中打开文件的选项.如何为我的语言提供类似的功能,提供"示例语言(默认)"和"带编码的示例语言"选项?

  2. 当您打开工具→选项...→文本编辑器→文件扩展名时,您可以将(例如).foo扩展名绑定到"Microsoft Visual C#"或任何其他几个选项.如何扩展此页面以允许用户定义的文件扩展名与"示例语言"相关联?

  3. 注册这些物品时我还应该注意什么?

vsx visual-studio languageservice

8
推荐指数
1
解决办法
2725
查看次数

Typescript 编译器即服务:如何测试一种类型是否可分配给另一种类型?

我正在制作一个命令行 nodejs 工具,它使用 Typescript 语言服务自动重命名 Typescript 文件中的符号。

您告诉工具:将此类型的所有符号重命名为此符号。就像 resharper 一样,它也会重命名局部变量、属性等。由于它允许一次重命名多个符号,因此您还可以交换两个符号名称,而不需要中间临时唯一名称(例如,将 Foo 重命名为 Bar,反之亦然)。

我必须将语言服务中的私有函数 getSymbolInfoAtPosition 公开才能使其工作,以便我可以获得 PullSymbol 信息

目前,它仅通过在 PullSymbol 上调用 getNameAndTypeName 来检测精确的名称+类型匹配,但我想执行结构兼容的匹配。

在 C# 中,这很容易,因为 Type 有一个 IsAssignableFrom 方法。

有谁知道如何使用 Typescript 编译器即服务来检测一个 PullSymbol 是否在结构上与另一个 PullSymbol 兼容?

非常感谢,彼得·韦斯维伦

rename automated-refactoring languageservice typescript typescript-compiler-api

6
推荐指数
1
解决办法
640
查看次数

如何在Visual Studio中使用投影缓冲区来编辑嵌入在C#中的语言?

投影技术可以用来定制支持嵌入式语言Visual Studio编辑器.在线提供的示例,例如Django编辑器自定义支持HTML中嵌入的脚本语言.这些实现似乎与内置的HTML编辑器绑定在一起.

有没有人就如何为嵌入在C#中的语言实现类似功能提出建议?我试图复制用于Django编辑器的投影缓冲区解决方案,并将内容类型从"HTML"更改为"CSharp".编辑器似乎将C#内容识别为"代码",但不提供语法高亮,IntelliSense等.

c# visual-studio languageservice

5
推荐指数
0
解决办法
107
查看次数

实现一系列语言服务

在阅读src\services代码之后,似乎这是语言服务的任何主机必须满足的接口:

//
// 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;
}
Run Code Online (Sandbox Code Playgroud)

我找不到任何文档或样本,虽然有些方法不言自明,但其他方法却没有,特别是:

getScriptId()
getScriptIsResident()
getScriptVersion()
getScriptEditRangeSinceVersion()
Run Code Online (Sandbox Code Playgroud)

语言服务API是否可以使用?有人可以简要解释一下上述方法的用途吗?

languageservice typescript

4
推荐指数
1
解决办法
703
查看次数

JSDoc/JavaScript 语言服务:如何注释表达式?(如何投射)

我使用 Visual Studio Code 并将 JavaScript 语言服务配置为:

{
    "compilerOptions": {
        "checkJs": true
    }
}
Run Code Online (Sandbox Code Playgroud)

我找不到一种方法来投射某些东西,如下所示:

错误信息

上面的示例应该可以在 Closure Compiler 中运行(未经验证),如此处所述。但我找不到 JavaScript 语言服务的等效语法。

我还尝试了以下更简单的语句,但它也不起作用:

let castedWindow = (/** @type {any} */(window));  // castedWindow: Window (I want `any`)
Run Code Online (Sandbox Code Playgroud)

我问如何进行强制转换,以及是否有人碰巧知道语法的记录位置(或者,如果没有记录,则知道它是如何工作的)。

我所问的可能吗?

谢谢你的时间!

javascript casting languageservice jsdoc visual-studio-code

4
推荐指数
1
解决办法
617
查看次数

使用托管包框架实现语言服务

我已经按照步骤(http://msdn.microsoft.com/en-us/library/bb166360.aspx)中列出的步骤来实现和注册LanguageService,但我根本无法使用它.

我的包正确加载,我可以添加功能菜单项和选项页,但我无法打开注册到我的服务的文件.当我附加一个调试器时,我可以看到我的VSPackage被构造,加载,并且它的FDoIdle方法被调用了两次.在那之后,实验性的Visual Studio会话进入杂草并且似乎陷入无限循环.如果我尝试将.txt文件保存为我的文件类型,则文件会正确保存,但不会在Visual Studio中加载,我会收到Object null异常.

我可以看到我在这个问题中提到的问题:Visual Studio 2010着色剂,智能感知和其他.从哪儿开始!

解决方案似乎是不使用Managed Package Framework而是使用Manage Extensibility Framework.这很好,但是我真的很想知道我的MPF语言服务实现有什么问题.

有没有人使用MPF成功创建了LanguageService?任何人都可以指导我一个工作示例或演练吗?

问题解决了!:

我做了一些进一步的调试,并注意到实验性的Visual Studio实例被卡住后重复调用:

Microsoft.VisualStudio.Editor.Implementation.VsFontsAndColorsInformation.TryGetIndexForNativeItem(String name,IVsColorTable colorTable,Int32&colorTableIndex)

在预感中,我在ProvideLanguageServiceAttribute中将RequestStockColors参数指定为true,现在我可以打开我的文件类型.我的简单扫描仪甚至还有工作语法着色!

c# mef mpf languageservice walkthrough

3
推荐指数
1
解决办法
1097
查看次数

安装自定义Visual Studio语言服务

我按照一篇非常有用的文章编写你的第一个Visual Studio语言服务的指示,为我的软件工作室的内部脚本语言编写了一个新的Visual Studio语言服务.我的语法很棒,一些简单的goto案例正在运行,还有文本着色.我已经在Irony GrammarExplorer和Visual Studio Experimental Hive中完成了我的测试,我觉得我已经准备好在visual studio中正常使用它并将其部署到其他一些程序员那里进行早期测试和反馈.

问题是我不知道如何安装语言服务.我有这个漂亮的小DLL,可以在Experimental Hive中运行,但是无论如何在我启动visual studio时都能运行它.我在互联网上看了一眼,发现在我看的每个地方都有特别的步骤.也许我只是盲目,或者比我想象的要容易得多,但如果有人能给我详细介绍如何安装我的语言服务,我真的很感激.

提前致谢!

installation irony visual-studio languageservice

2
推荐指数
1
解决办法
1255
查看次数

在Visual Studio 2010语言服务中实现查找引用

我正在为自定义脚本语言实现Visual Studio语言服务.我已设法实现语法突出显示,错误检查,代码完成和"转到定义".我无法弄清楚如何挂钩"查找所有引用"菜单选项(或者甚至让它在此时显示).

有人能指出我在Visual Studio中为自定义语言实现"查找所有引用"功能的有用资源吗? 我已经尝试使用Google搜索有关它的任何信息,但我似乎找不到任何东西.

c# visual-studio-addins visual-studio-2010 visual-studio languageservice

2
推荐指数
1
解决办法
613
查看次数