.. back to home

sql语言脚本开发-语法突出


语法突出显示指南:VS Code 使用文本伴侣(TextMate)语法进行语法突出显示。本指南将引导您编写简单的 TextMate 语法并将其转换为 VS Code 扩展。

TextMate 语法

 1{  
 2   scopeName = 'source.untitled';
 3   fileTypes = ( );
 4   foldingStartMarker = '\{\s*$';
 5   foldingStopMarker = '^\s*\}';
 6   patterns = (
 7      {  name = 'keyword.control.untitled';
 8         match = '\b(if|while|for|return)\b';
 9      },
10      {  name = 'string.quoted.double.untitled';
11         begin = '"';
12         end = '"';
13         patterns = ( 
14            {  name = 'constant.character.escape.untitled';
15               match = '\\.';
16            }
17         );
18      },
19   );
20}

语言语法用于为文档元素(如关键字、注释、字符串或类似元素)分配名称。这样做的目的是允许样式(语法突出显示),并使文本编辑器“智能”了解插入符号所在的上下文。例如,您可能希望击键或制表符触发器根据上下文采取不同的操作,或者您可能希望在键入文本文档中非散文的部分(例如.HTML标签)时禁用拼写检查。

  • scopeName (第 1 行)— 这应该是语法的唯一名称,遵循点分隔名称的约定,其中每个新(最左侧)部分专门化名称。通常,它将是一个由两部分组成的名称,其中第一部分是 text OR source 部分,第二部分是语言或文档类型的名称。但是,如果要专用于现有类型,则可能希望从要专用的类型派生名称。例如 Markdown 是 和 Ruby on Rails ( rhtml 文件) 是 text.html.rails text.html.markdown 。从(在这种情况下) text.html 派生它的优点是,在作用域中工作的所有内容也将在 text.html text.html.«something» 作用域中工作(但优先级低于专门针对 text.html.«something» 的内容)。

  • patterns (第 5-18 行)— 这是一个数组,其中包含用于解析文档的实际规则。在此示例中,有两个规则(第 6-8 行和第 9-17 行)。规则将在下一节中解释。

    规则可以通过两种方式与文档匹配:

    它可以提供一个正则表达式,也可以提供两个正则表达式。与上面第一条规则(第 6-8 行)中的 match 键一样,与该正则表达式匹配的所有内容都将获得该规则指定的名称。

    另一种类型的匹配是第二条规则(第 9-17 行)使用的匹配。这里使用 and begin end 键给出两个正则表达式。规则的名称将从开始模式匹配的位置分配到结束模式匹配的位置(包括两个匹配)。如果结束模式不匹配,则使用文档的结尾。

    规则键:

    name — 分配给匹配部分的名称。这用于样式设置和特定于范围的设置和操作,这意味着它通常应派生自标准名称之一(请参阅后面的命名约定)。

    captures , , beginCaptures — endCaptures 这些键允许您将属性分配给 match 、 begin 或 end 模式的捕获。将 captures 键用于 begin / end 规则是给出两者 beginCaptures 并 endCaptures 具有相同值的简写。

    include — 这允许您引用不同的语言,递归引用语法本身或在此文件的存储库中声明的规则。

  • repository — 规则的字典(即.key/值对),可以从语法中的其他地方包含。键是规则的名称,值是实际规则。 include 规则键的说明(和示例)之后是进一步的说明。

注入语言嵌入式语言还有一个额外的复杂性:默认情况下,VS Code 将字符串中的所有标记视为字符串内容,将带有注释的所有标记视为标记内容。由于括号匹配和自动结束对等功能在字符串和注释中被禁用,因此如果嵌入语言出现在字符串或注释中,这些功能也将在嵌入语言中被禁用。

语言支持,不能平行扩展,只能细化扩展;平行扩展可以重新搞一份,在基础上改造