     #
     # Attributes
     #
-    'attribute': {
-      'patterns': [
-        { 'include': '#linkage-attribute' },
-        { 'include': '#align-attribute' },
-        { 'include': '#deprecated-attribute' },
-        { 'include': '#protection-attribute' },
-        { 'include': '#pragma' },
-        {
-          'match': 'static|extern|abstract|final|override|synchronized|auto|scope|const|immutable|inout|shared|__gshared|nothrow|pure|ref',
-          'name': 'entity.other.attribute-name.d'
-        },
-        { 'include': '#property' },
-      ]
-    },
-    'linkage-attribute': {
-      'patterns': [
-        {
-          'begin': 'extern\\s*\\(\\s*C\\+\\+,',
-          'beginCaptures': { '0': { 'name': 'keyword.other.extern.cplusplus.begin.d' } },
-          'end': '\\)',
-          'endCaptures': { '0': { 'name': 'keyword.other.extern.cplusplus.end.d' } },
-          'patterns': [
-            { 'include': '#identifier-list' },
-          ]
-        },
-        {
-          'begin': 'extern\\s*\\(',
-          'beginCaptures': { '0': { 'name': 'keyword.other.extern.begin.d' } },
-          'end': '\\)',
-          'endCaptures': { '0': { 'name': 'keyword.other.extern.end.d' } },
-          'patterns': [
-            { 'include': '#linkage-type' },
-          ]
-        }
-      ]
-    },
-    'linkage-type': {
-      'patterns': [
-        'match': 'C|C\\+\\+|D|Windows|Pascal|System',
-        'name': 'storage.modifier.linkage-type.d'
-      ]
-    },
-    'align-attribute': {
-      'patterns': [
-        {
-          'begin': 'align\\(',
-          'end': '\\)',
-          'name': 'storage.modifier.align-attribute.d',
-          'patterns': [
-            { 'include': '#integer-literal' }
-          ]
-        },
-        {
-          'match': 'align\\s*[^\\(]',
-          'name': 'storage.modifier.align-attribute.d',
-        }
-      ]
-    },
-    #
-    # Deprecated
-    #
-    'deprecated-attribute': {
-      'patterns': [
-        {
-          'begin': 'deprecated\\s*\\(',
-          'beginCaptures': { '0': { 'name': 'keyword.other.deprecated.begin.d' } },
-          'end': '\\)',
-          'endCaptures': { '0': { 'name': 'keyword.other.deprecated.end.d' } },
-          'patterns': [
-            { 'include': '#string-literal' },
-          ]
-        },
-        {
-          'match': 'deprecated\\s*[^\\(]',
-          'name': 'keyword.other.deprecated.plain.d'
-        }
-      ]
-    },
-    #
-    # Protections
-    #
-    'protections-attribute': {
-      'patterns': [
-        'match': 'private|package|protected|public|export',
-        'name': 'keyword.other.protections.d'
-      ]
-    },
+
     #
     # Properties
     #
-    'property': {
-      'patterns': [
-        {
-          'match': '@(property|safe|trusted|system|disable|nogc)',
-          'name': 'entity.name.tag.property.d',
-        },
-        {
-          'match': '@([_\\w][_\\d\\w]*)',
-          'name': 'entity.name.tag.user-defined-property.d',
-        },
-        {
-          'begin': '@([_\\w][_\\d\\w]*)\\(',
-          'end': '\\)',
-          'name': 'entity.name.tag.user-defined-property.d',
-          'patterns': [
-            { 'include': '#expression' }
-          ]
-        }
-      ]
-    },
+
     #
     # Condition
     #

        ]
      ]
    },
    ######
    # Misc
    ######
    'comma': {
      'patterns': [
        'match': ',',




    ###########################################################################
    # Attribute
    ###########################################################################
    'attribute-specifier': {
      'patterns': [
        { 'include': '#attribute' },
        { 'include': '#colon' },
        { 'include': '#declaration-block' }
      ]
    },
    'attribute': {
      'patterns': [
        { 'include': '#linkage-attribute' },
        { 'include': '#align-attribute' },
        { 'include': '#deprecated-attribute' },
        { 'include': '#protection-attribute' },
        { 'include': '#pragma' },
        {
          'match': 'static|extern|abstract|final|override|synchronized|auto|scope|const|immutable|inout|shared|__gshared|nothrow|pure|ref',
          'name': 'entity.other.attribute-name.d'
        },
        { 'include': '#property' },
      ]
    },
    'declaration-block': {
      'patterns': [
        {
          'begin': '\\{',
          'end': '\\}',
          'patterns': [
            { 'include': '#decl-defs' },
          ]
        }
        { 'include': '#decl-def' },
      ]
    }
    'linkage-attribute': {
      'patterns': [
        {
          'begin': 'extern\\s*\\(\\s*C\\+\\+,',
          'beginCaptures': { '0': { 'name': 'keyword.other.extern.cplusplus.begin.d' } },
          'end': '\\)',
          'endCaptures': { '0': { 'name': 'keyword.other.extern.cplusplus.end.d' } },
          'patterns': [
            { 'include': '#identifier-list' },
          ]
        },
        {
          'begin': 'extern\\s*\\(',
          'beginCaptures': { '0': { 'name': 'keyword.other.extern.begin.d' } },
          'end': '\\)',
          'endCaptures': { '0': { 'name': 'keyword.other.extern.end.d' } },
          'patterns': [
            { 'include': '#linkage-type' },
          ]
        }
      ]
    },
    'linkage-type': {
      'patterns': [
        'match': 'C|C\\+\\+|D|Windows|Pascal|System',
        'name': 'storage.modifier.linkage-type.d'
      ]
    },
    'align-attribute': {
      'patterns': [
        {
          'begin': 'align\\(',
          'end': '\\)',
          'name': 'storage.modifier.align-attribute.d',
          'patterns': [
            { 'include': '#integer-literal' }
          ]
        },
        {
          'match': 'align\\s*[^\\(]',
          'name': 'storage.modifier.align-attribute.d',
        }
      ]
    },
    'deprecated-attribute': {
      'patterns': [
        {
          'begin': 'deprecated\\s*\\(',
          'beginCaptures': { '0': { 'name': 'keyword.other.deprecated.begin.d' } },
          'end': '\\)',
          'endCaptures': { '0': { 'name': 'keyword.other.deprecated.end.d' } },
          'patterns': [
            { 'include': '#string-literal' },
          ]
        },
        {
          'match': 'deprecated\\s*[^\\(]',
          'name': 'keyword.other.deprecated.plain.d'
        }
      ]
    },
    'protection-attribute': {
      'patterns': [
        'match': 'private|package|protected|public|export',
        'name': 'keyword.other.protections.d'
      ]
    },
    'property': {
      'patterns': [
        {
          'match': '@(property|safe|trusted|system|disable|nogc)',
          'name': 'entity.name.tag.property.d',
        },
      ]
    },
    'property-identifier': {
      'patterns': [
        'match': 'property|safe|trusted|system|disable|nogc',
        'name': 'entity.name.tag.property.d'
      ]
    },
    'user-defined-attribute': {
      'patterns': [
        {
          'match': '@([_\\w][_\\d\\w]*)',
          'name': 'entity.name.tag.user-defined-property.d',
        },
        {
          'begin': '@([_\\w][_\\d\\w]*)\\(',
          'end': '\\)',
          'name': 'entity.name.tag.user-defined-property.d',
          'patterns': [
            { 'include': '#expression' }
          ]
        }
      ]
    },

    'pragma': {
      'patterns': [
        {
          'match': 'pragma\\s?\\(\\s*[_\\w][_\\d\\w]*\\s*\\)',
          'name': 'gfm.markup.header.preprocessor.pragma.d'
        },
        {
          'begin': 'pragma\\s?\\(\\s*[_\\w][_\\d\\w]*\\s*,',
          'end': '\\)',
          'name': 'gfm.markup.header.preprocessor.pragma.arguments.d'
          'patterns': [
            { 'include': '#expression' },
          ]
        },
        {
          'match': '^#!.+',
          'name': 'gfm.markup.header.preprocessor.script-tag.d'
        }
      ]
    },
    ###########################################################################
    # Conditional
    ###########################################################################
    'conditional-declaration': {
      'patterns': [
        { 'include': '#condition' },
