Visual Studio语法突出显示如何工作?

安德烈·里卡多·庞特斯

当我在aspx页面中创建标签“样式”时,Visual Studio highligths代码使用CSS样式语法来突出显示和设置格式。当我创建标记“脚本”时,Visual Studio会执行相同的操作,但是使用javascript样式语法。

创建.scss文件时,Visual Studio具有scss语法。我创建了一个处理SCSS的新服务器控件,并且希望该服务器控件内编写的代码使用scss样式语法。如何将特定标签与特定语法处理器关联起来?

附注:我正在使用Visual Studio 2017

吉米

VS中的编辑器(以及许多与编辑器相关的功能)依赖于内容类型,该内容类型指示了他们支持的语言。大多数编辑器(例如C#或VB)仅适用于单个“内容类型”。

Visual Studio中的HTML和ASPX编辑器(是单独的编辑器)标识某些模式,这些模式指示正在使用另一种语言。然后,它将在内存(TextBuffers)中创建多个内部文档,每种已标识的语言都有单独的“内容类型”。然后,针对每个语言的语言服务都可以用于本地处理语言,而不必使用HTML来“了解” CSS / JavaScript /其他所有内容。例如:

  • <script> 块或事件处理程序为内容创建一个JavaScript缓冲区
  • <style>块或style=属性创建CSS缓冲区
  • 任何<%-style ASP.NET块均可以创建适当的语言缓冲区(C#/ VB)
  • @在剃刀CSHTML文件创建一个C#缓冲区
  • 等等

这些嵌套的TextBuffer实际上是使该语言看起来正确的整个文档。例如,如果我有:

<span style="color: blue;" />

CSS缓冲区是一个内部文档,看起来像这样:

/* BEGIN EXTERNAL SOURCE */
span {
color: blue;
}
/* END EXTERNAL SOURCE */

请务必注意,这是一个完整且可解析的CSS文档,因此语言服务可以正常工作以查找错误,提供IntelliSense等功能。

(并且,如果您认为CSS缓冲区看起来很凌乱,则应该看看Razor或ASPX块会发生什么……)

然后,ASPX编辑器使用VS编辑器平台将这些缓冲区之间的投影协调成您所看到的单个视图-TextView。因此,它看起来像一个文档,但是在内部作为多个不同的文档(TextBuffer)处理,每种语言一个。

现在,提出一个问题:如何使ASPX编辑器支持SCSS?好吧,这包括两个部分:

首先,ASPX编辑器将需要知道如何识别文档的SCSS区域。这可能是<style type="text/scss">另一个指标。如果扩展是可扩展的,甚至可以通过向ASPX编辑器编写扩展来完成(HTML编辑器对编写扩展更友好)。

接下来,ASPX编辑器将创建投影范围。它将交给SCSS语言服务。SCSS语言服务需要知道它在投影中,并生成所有额外的内容以使语法树起作用。(注意:VS中的SCSS语言服务今天不支持此功能。)

从那时起,需要将SCSS区域中发生的所有事情映射到TextView(光标位于您看到的文档中)和特定于SCSS的TextBuffer(光标位于该语言使用的内存中文档之间)之间服务)。同样,今天SCSS LS并未考虑这种情况。

获得支持的最好方法是通过Visual Studio开发人员社区提供反馈。此功能已经在积压中,但是为其添加更多选票将有助于团队确定工作的优先级。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

自定义Visual Studio Code中的语法突出显示

设置语言以在Visual Studio Code中突出显示语法

Visual Studio 2015 JSX / ES2015语法突出显示

打字稿1.4:Visual Studio中语法错误突出显示

在Visual Studio中突出显示泛型类型的语法

在Visual Studio中突出显示匹配的括号

如何在Visual Studio 2013中为经典ASP启用智能感知和语法突出显示

Visual Studio 2015中的ReactJS(JSX)语法突出显示

Visual Studio 2015 JSX / ES2015语法以babel突出显示

Visual Studio 2017中的SQL语法突出显示

Visual Studio 2017 XAML设计器没有语法突出显示

创建Visual Studio Code扩展以突出显示自定义语言的语法

在Visual Studio Code C ++扩展中突出显示错误语法

Visual Studio Team Services(VSTS)Wiki是否支持语法突出显示?

获取Visual Studio代码以语法突出显示无扩展名的文件作为bash脚本?

Visual Studio语法突出显示/自动完成功能无法正常工作

Visual Studio代码-语法突出显示颜色的含义

Visual Studio 2017 CSHTML语法突出显示不起作用

如何将Sublime Text语法突出显示文件转换为Visual Studio的textmate语法?

CMakeLists.txt的Visual Studio Code语法突出显示

如何在Visual Studio 2017中查找和使用新的语法突出显示主题

如何在Visual Studio Code中为Dart变量设置语法突出显示

Visual Studio 2019黑暗主题:如何使用默认语法突出显示将代码复制和粘贴到MS Word?

Visual Studio Code语法突出显示不起作用

如何在Visual Studio 2012中为* .handlebars文件启用语法突出显示?

如何为Visual Studio 2010或2013的备用文件扩展名获取语法突出显示?

如何在Visual Studio中突出显示虚函数

Visual Studio在同时加载多个实例时显示错误的语法突出显示颜色

Visual Studio 智能感知/语法突出显示不适用于远程文件