【问题标题】:How Visual Studio syntax highlight works?Visual Studio 语法高亮如何工作?
【发布时间】:2018-07-06 14:51:02
【问题描述】:

当我在 aspx 页面中创建标签“样式”时,Visual Studio 使用 css 样式语法突出显示和格式化代码。当我创建一个标签“脚本”时,Visual Studio 会做同样的事情,但使用的是 javascript 样式语法。

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

Ps.:我使用的是 Visual Studio 2017

【问题讨论】:

  • @ChristianGollhardt:不;他希望在aspx 文件中的标签内。
  • 我的错,抱歉,撤回了。
  • 你只能通过编写VS扩展来做到这一点。
  • “vinculate”作为母语为英语(英国)的人,直到今天我才遇到这个词。我认为“绑定”可能是一个更好的词,将来可能会使用:)。
  • 有人知道 VS 是如何使用样式或脚本标签的吗?因为它在 aspx 文件以及 css 或 js 文件中的标签中为 css 或 javascript 应用了正确的语法高亮显示。我想要做的就是使用某个标签来应用相同的语法突出显示,就像它已经为 scss 文件所做的那样。 Ps.:对不起我的英语,谢谢指正!

标签: visual-studio visual-studio-2017 syntax-highlighting


【解决方案1】:

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

Visual Studio 中的 HTML 和 ASPX 编辑器(它们是独立的编辑器)识别某些模式,这些模式表明正在使用不同的语言。然后,它在内存(TextBuffers)中创建多个内部文档,并为识别的每种语言提供单独的内容类型。然后可以使用其中每一个的语言服务来本地处理语言,而不是 HTML 必须“了解”所有关于 CSS/JavaScript/其他任何东西。例如:

  • <script> 块或事件处理程序为内容创建 JavaScript 缓冲区
  • <style> 块或 style= 属性创建 CSS 缓冲区
  • 任何<% 样式的 ASP.NET 块都会创建适当的语言缓冲区 (C#/VB)
  • Razor CSHTML 文件中的 @ 创建一个 C# 缓冲区

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

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

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

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

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

(如果你认为 CSS 缓冲区看起来很乱,你应该看看 Razor 或 ASPX nuggets 会发生什么......)

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

现在,回答您的问题:如何使 ASPX 编辑器支持 SCSS?嗯,这有两个部分:

首先,ASPX 编辑器需要知道如何识别文档的 SCSS 区域。这可能是&lt;style type="text/scss"&gt; 或其他指标。这甚至可以通过为 ASPX 编辑器编写扩展来完成(如果它是可扩展的(HTML 编辑器对编写扩展更加友好))。

接下来,ASPX 编辑器将创建投影跨度。它将把它交给 SCSS 语言服务。 SCSS 语言服务需要知道它在一个投影中,并生成所有额外的东西以使语法树工作。 (注意:VS 中的 SCSS 语言服务目前不支持此功能。)

从那时起,SCSS 区域中发生的所有事情都需要在 TextView(光标在您看到的文档中的位置)和 SCSS 特定的 TextBuffer(光标在所使用的内存中文档中的位置)之间进行映射由语言服务部门提供)。同样,今天的 SCSS LS 没有考虑到这种情况。

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

【讨论】:

  • 感谢您的精彩回答。你有这个功能积压的链接吗?
  • @AndréRicardoPontes 不幸的是,积压项目无法公开查看,我在开发者社区网站上找不到类似的反馈票。如果您打开一个新功能(只需通过 VS 发送反馈),它将帮助团队跟踪用户对该功能的兴趣并在列表中将其优先级更高。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多