YAML对象属性

时间:2018-03-08 12:29:58

标签: yaml

我在YAML中定义代码审查配置。我需要保持配置尽可能紧凑,而不显式定义像名称值对的xml / json。

- group: Naming convention
  severity: medium
  rules:
   - name: Check API naming convention
     type: pattern
     element: api.@name
     pattern: '.*\-.*\-\d\.\d'
     properties:
      - exit-on-fail
      - skip-and-proceed
      - etc.

我不喜欢这里定义标签“属性”来添加动作。这些操作是否可以存在于对象级别?

1 个答案:

答案 0 :(得分:1)

缩进,它们可以存在于对象级别:

- group: Naming convention
  severity: medium
  rules:
   - name: Check API naming convention
     type: pattern
     element: api.@name
     pattern: '.*\-.*\-\d\.\d'
     properties:
     - exit-on-fail
     - skip-and-proceed
     - etc.

这是有效的,因为YAML将-视为缩进,因此,这仍然会创建一个列表作为properties:键的值。

为了紧凑,你也可以像daggett建议的那样内联写它们:

- group: Naming convention
  severity: medium
  rules:
   - name: Check API naming convention
     type: pattern
     element: api.@name
     pattern: '.*\-.*\-\d\.\d'
     properties: [exit-on-fail, skip-and-proceed, etc]

最后,您可以将它们放入您的对象映射,只要它们不与任何其他字段共享名称

- group: Naming convention
  severity: medium
  rules:
   - name: Check API naming convention
     type: pattern
     element: api.@name
     pattern: '.*\-.*\-\d\.\d'
     ? exit-on-fail
     ? skip-and-proceed
     ? etc.

这会在对象中创建三个额外的键值对,其中三个属性是键,空字符串(可能是一个空值,具体取决于您使用的YAML实现)是值。如果执行此操作,则需要编写自定义构造函数以将其加载到本机数据结构中,因为您需要区分对象字段和操作。再次,如何做到这一点取决于你的YAML实现。