设置属性组

需要属性组来定义 COBOL , PL/I , HLASM 和 REXX 编辑器在您编辑程序时如何搜索副本和/或包含内容。 如果不装入这些内容,那么 Z Open Editor 所使用的语言服务器将无法正确解析程序并显示由于这些文件中包含的缺少定义而导致的许多语法错误。 属性组还可用于指定特定于语言的编译器选项。

要在 ZAPP 文件中定义属性组,可以使用 Z Open Editor 提供的 VS 代码片段,然后填写详细信息。 指定该文件是 syslib 包含文件还是库的一部分,然后提供要在其中进行搜索的潜在本地或远程位置的数组。 这些位置可以是要在 z/OS 系统上搜索的本地目录路径或 MVS 数据集名称的绝对,相对或 GLOB 文件模式。

以下是来自 ZAPP 文件的 COBOL 属性组的示例,该文件定义了副本的本地搜索路径以及库文件的远程和本地位置。 所有这些位置都将在 oder 上下搜索:

propertyGroups:
  - name: cobol-copybooks
    language: cobol
    libraries:
      - name: syslib
        type: local
        locations:
          - "**/COPYBOOK"
          - "projectA/copy"
      - name: MYLIB
        type: mvs
        locations:
          - IBMUSER.SAMPLE.COPYLIB
      - name: MYLIB
        type: local
        locations:
          - "**/COPYLIB"

Z Open Editor 监视与开发机器上 "本地" 类型的位置匹配的所有文件夹。 如果这些文件夹中的文件已更改,添加或删除,那么 Z Open Editor 将根据该更改进行重新评估。 例如,如果编辑器打开了一个程序,发现本地文件夹中包含的 COBOL 副本与上述代码段中的 "projectA/copy" 位置相匹配,并且发现该副本已被删除,那么编辑器会立即尝试在其他位置搜索该副本。 编辑器将在给定的顺序自顶向下再次执行此操作。 然后,它可能会在 "mvs" 位置 "IBMUSER.SAMPLE.COPYLIB" ,并改为装入和使用该版本的副本。

以下示例为 PL/I 定义了一个属性组,该属性组具有一个典型的编译器选项,用于将 ASCII 中不存在的 EBCDIC NOT 符号映射到 VS Code 中可用的公共字符:

- name: pl1-includes
  language: pl1
  compilerOptions: "not(!),margins(2,100)"
  libraries:
    - name: syslib
      type: local
      locations:
        - "**/INCLUDES"

如上面的示例所示,您需要为每个属性组指定唯一的名称,这是唯一的必需属性。 该名称可 帮助进行故障诊断 ,因为 "VS 代码" 输出视图显示有关要搜索的属性组以及顺序的信息。

下面的部分深入说明了如何充分利用属性组对象中的某些属性。

语言作用域限定

您可以选择定义将作用域限定为特定企业语言的属性组,以防您有使用多种语言的应用程序。 在 "VS 代码" 编辑器中使用 Ctrl + Space (Windows 和 Mac) 来查看有效语言值的列表,这些值当前包括 cobolpl1hlasmrexxjcl

指定语言时,还可以定义影响编辑器的编译器选项。 例如,可以指定用于将特殊字符映射到运算符的 PL/I 代码页选项,例如将 ! 字符映射到 NOT 运算符,如以上示例中所示。 另一个用例是指定要用于 PL/I 程序的页边距。 如上面的属性组示例 pl1-includes 所示,应该在一个用逗号分隔的字符串中列出多个选项。 如果一个语言有多个属性组,那么将合并 compilerOptions 字符串。 请注意,这些选项全局应用于以该语言在工作空间作用域内打开的所有文件。 因此,添加专门用于定义全局编译器选项的属性组是有效的,它可以仅包含 namelanguagecompilerOptions 属性。 有关更多详细信息,请参阅设置编译器选项页面

Syslib 和 Libraries

Syslib

使用 ZAPP 属性组中 libraries 项的名称 syslib 来解析以下类型的语句:

  • COPY <COPYBOOK_NAME> (COBOL 和 HLASM)

  • %INCLUDE <INCLUDE_NAME> (PL/I)

  • /*%INCLUDE <INCLUDE_NAME> */ (REXX)

对于 locations 的值,请提供一个目录路径名数组(用于本地属性组)或数据集名数组(用于 mvs 属性组),以便 IBM Z Open Editor 查找包含的内容。 您可以提供多个路径,以解析不同文件夹中的包含。 对于本地 libraries 项,可以指定相对于 ZAPP 文件所在工作空间的路径或开发机器上的绝对路径。

使用 libraries 项设置的定制名称来解析以下类型的语句 (将 <LIBRARY_NAME> 替换为您为 te 项指定的名称):

  • COPY <COPYBOOK_NAME> IN <LIBRARY_NAME> (COBOL)

  • %INCLUDE <LIBRARY_NAME> (<INCLUDE_NAME>) (PL/I)

  • /*%INCLUDE <LIBRARY_NAME>(<INCLUDE_NAME>) */ (REXX)

您可以在属性组的 libraries 数组中提供多个库项。 libraries 数组中的每个库项都由以下属性组成:

  • name 属性必须与程序中使用的库名匹配。 例如,要解析 COBOL 语句 COPY COPYFILE IN MYLIB 中的库引用,name 的值必须为 "MYLIB"

  • type 属性可以是 localmvs ,指定提供的 locations 是本地搜索路径实体还是 MVS 数据集。

  • locations 属性是关联库名的目录或数据集名称的数组。

使用 Zowe 概要文件的 MVS 属性组

如果在开发机器上配置了 Zowe CLI 或 Zowe Explorer ,那么类型为 mvslibraries 项将尝试使用 Zowe RSE 或 z/OSMF 服务概要文件来解析 COBOL 程序中引用的副本。 我们将详细介绍如何在 设置集成以与 z/OS交互中定义此类概要文件。

创建具有对属性组中列出的 MVS 数据集的直接访问权的此类概要文件后, COBOL 编辑器将尝试在提供的 syslib 和库位置中查找副本。 在 MVS 远程文件解析期间,IBM Z Open Editor 使用 MVS 连接测试来验证所使用的认证方法(图 1)。 如果 JWT 不在服务概要文件或基本概要文件中,那么将尝试使用用户名和密码进行基本认证。

  • 如果用户名和密码未保存在概要文件中,那么 IBM Z Open Editor 将提示您输入凭证。

  • 如果 MVS 连接测试返回 401: Not Authorized 错误信息,IBM Z Open Editor 会提示您在 IDE 会话的剩余时间更新凭据。 取消凭证更新将在 IDE 会话期间或通过命令选用板选项 IBM Z Open Editor: Reload Zowe Profiles刷新概要文件状态之前关闭 MVS 远程文件解析。 如果选择更新凭证,那么您还可以选择将其保存到概要文件的本地文件以供将来使用项。

Fig.1: MVS 连接测试流程图

图 1:MVS 连接测试流程图

如果已定义 zosmfrse类型的多个 Zowe 概要文件,那么编辑器将使用缺省概要文件来确定要使用的概要文件。 如果您希望编辑器改为选择其他概要文件,那么可以在 zopeneditor.zowe 用户设置中指定概要文件。

使用 glob 模式、相对路径和绝对路径设置 IBM Z Open Editor 属性组(仅限本地文件)

IBM Z Open Editor 支持本地文件的 glob 模式、相对路径模式和绝对路径模式,以便提供 locations 项目。 下面是有关使用本地文件的 glob 模式、相对路径和绝对路径添加属性组的一些示例。 请注意,当前没有对 MVS 数据集名称的通配符支持。 这些必须完全匹配。

Glob 模式

Glob 模式可以有以下语法:

  • ?,以匹配路径段中的一个字符

  • *,以匹配路径段中的一个或多个字符

  • **,以匹配任意数量的路径段。

请参阅 minimatch glob patterns 文档 以获取更多信息。

针对 Windows 和 Mac 使用基本 glob 模式的示例:

propertyGroups:
- name: cobol-copybooks
  language: cobol
  libraries:
    - name: syslib
      type: local
      locations:
        - "zopeneditor-sample/**",
        - "zopeneditor-sample/**/COPYFILES"
    - name: MYFILE
      type: local
      locations:
        - "zopeneditor-sample/**/COPY*",
        - "zopeneditor-sample/**/INCLUD?LIB"

需要注意的一些事项:

  • Windows: 仅在 glob 表达式中使用正斜杠 (/)。 虽然 Windows 使用 /\ 作为路径分隔符,但此 glob 实现仅使用 / 字符。 在 glob 表达式中只能使用正斜杠。 反斜杠将始终解释为转义字符,而不是路径分隔符。

  • 性能警告: Using glob expressions can have an impact on the time it takes for Z Open Editor to find include files if it has to search through hundreds of local file directories. 修改搜索模式,尽可能匹配最少数量的文件夹,以提高查找副本和包含文件的性能。

相对路径模式

IBM Z Open Editor 属性组位置可以是相对于工作区根的路径模式。 您希望避免指向工作空间外部的模式,因为对于要与之共享 ZAPP 文件的每个开发者,这些模式可能有所不同。 这对于多根工作空间也很重要: 您不想引用另一个工作空间中的文件。 相反,每个工作空间都可以有自己的 ZAPP 文件,并且所有工作空间的属性组都将按照在多根 .code-workspace file中列出工作空间的顺序进行并置。

绝对路径模式

IBM Z Open Editor 支持 locations 项目的绝对路径模式。

Windows

propertyGroups:
- name: cobol-copybooks
  language: cobol
  libraries:
    - name: syslib
      type: local
      locations:
        - "C:\\Users\\<username>\\Desktop\\zopeneditor-sample\\COPYBOOK",
        - "C:/Users/<username>/Desktop/zopeneditor-sample/INCLUDES"
    - name: MYFILE
      type: local
      locations:
        - "C:/Users/<username>/Desktop/zopeneditor-sample/COPYLIB",
        - "C:\\Users\\<username>\\Deskto\\zopeneditor-sample\\INCLUDELIB"

Mac

propertyGroups:
- name: cobol-copybooks
  language: cobol
  libraries:
    - name: syslib
      type: local
      locations:
        - "/Users/<username>/Desktop/zopeneditor-sample/COPYBOOK",
        - "/Users/<username>/Desktop/zopeneditor-sample/INCLUDES"
    - name: MYFILE
      type: local
      locations:
        - "/Users/<username>/Desktop/zopeneditor-sample/COPYLIB",
        - "/Users/<username>/Desktop/zopeneditor-sample/INCLUDELIB"

强制实施区分大小写的文件名匹配

从 IBM Z Open Editor 1.2.0 开始,通过本地 libraries 项匹配的文件名默认不区分大小写。 例如,如果在由本地属性组指定的工作空间文件夹中有名为 book1.cpy 的本地副本文件,那么 COBOL 语句 COPY BOOK1. 仍将解析该文件,即使在使用区分大小写的磁盘格式的区分大小写的操作系统(例如 Linux 或 Mac)上。 在较早版本的 Z Open Editor 中,这在区分大小写的操作系统上严格区分大小写。

虽然用户可以利用此新行为更灵活地创建小写的副本和包含文件,但这可能会在其成员使用不同操作系统或从 VS Code 切换到 Eclipse Che 的团队中带来问题。 例如,在区分大小写的操作系统上,文件可以在除了大小写不同之外同名的文件夹(例如 Book1BOOK1)中创建,但这会在不区分大小写的文件系统(如 Windows)上造成问题。 因此,要强制实施严格大小写匹配,您可以启用用户设置 "zopeneditor.enforceCaseSensitiveIncludeFileNames",该设置缺省情况下为 false。 将其设置为 true 意味着即使在 Windows 上,也需要程序代码中所指定的文件名的严格相同大小写。 这适用于 COBOL、PL/I 和 HLASM。

注:此行为也适用于属性组中指定的路径名,它们在缺省情况下不区分大小写,但可以使用此设置使其区分大小写。 但是,这仅适用于 Windows 和 Mac。 在 Linux 上,因而在 Eclipse Che 上,属性组路径名始终区分大小写。 在 Linux 上按该方式配置时,仅文件系统上的文件名以不区分大小写的方式进行匹配。

SQLCA 和 SQLDA 包含/副本

可以编写 COBOL 或 PL/I 程序以使用 SQL 通信区 (SQLCA)SQL 描述符区域 (SQLDA) 来检查嵌入式 SQL 语句的返回状态,或者程序可以使用 SQL 诊断区域来检查返回状态。

SQLCA 和 SQLDA 包含通常是内置的,不会添加到 zopeneditor 属性组中。 在 IBM Z Open Editor 中,SQLCA 和 SQLDA 副本将从搜索中排除,因为它们不存在,或者因为它们对于开发没有用处。 它不会在属性组中提及的 syslib 或 libraries 中查找这些副本。