{
  "fileTypes": [
    "pp"
  ],
  "foldingStartMarker": "(^\\s*/\\*|(\\{|\\[|\\()\\s*$)",
  "foldingStopMarker": "(\\*/|^\\s*(\\}|\\]|\\)))",
  "keyEquivalent": "^~P",
  "name": "Puppet",
  "patterns": [
    {
      "include": "#line_comment"
    },
    {
      "begin": "^\\s*/\\*",
      "end": "\\*/",
      "name": "comment.block.puppet"
    },
    {
      "begin": "(?x)^\\s*\n\t\t\t\t\t(node|class)\\s+\n\t\t\t\t\t((?:[-_A-Za-z0-9\".]+::)*[-_A-Za-z0-9\".]+)\\s* # identifier",
      "captures": {
        "1": {
          "name": "storage.type.puppet"
        },
        "2": {
          "name": "entity.name.type.class.puppet"
        }
      },
      "end": "(?={)",
      "name": "meta.definition.class.puppet",
      "patterns": [
        {
          "include": "#variables"
        },
        {
          "include": "#constants"
        },
        {
          "include": "#strings"
        },
        {
          "include": "#numbers"
        },
        {
          "begin": "\\b(inherits)\\b\\s+",
          "captures": {
            "1": {
              "name": "storage.modifier.puppet"
            }
          },
          "end": "(?={)",
          "name": "meta.definition.class.inherits.puppet",
          "patterns": [
            {
              "match": "\\b((?:[-_A-Za-z0-9\".]+::)*[-_A-Za-z0-9\".]+)\\b",
              "name": "support.type.puppet"
            }
          ]
        }
      ]
    },
    {
      "begin": "^\\s*(define)\\s+([a-zA-Z0-9_:]+)\\s*(\\()",
      "beginCaptures": {
        "1": {
          "name": "storage.type.function.puppet"
        },
        "2": {
          "name": "entity.name.function.puppet"
        },
        "3": {
          "name": "punctuation.definition.parameters.begin.puppet"
        }
      },
      "contentName": "meta.function.arguments.puppet",
      "end": "\\)",
      "endCaptures": {
        "1": {
          "name": "punctuation.definition.parameters.end.puppet"
        }
      },
      "name": "meta.function.puppet",
      "patterns": [
        {
          "captures": {
            "1": {
              "name": "variable.other.puppet"
            },
            "2": {
              "name": "punctuation.definition.variable.puppet"
            }
          },
          "match": "((\\$+)[a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)\\s*(?=,|\\))",
          "name": "meta.function.argument.no-default.puppet"
        },
        {
          "begin": "((\\$+)[a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*)(?:\\s*(=)\\s*)\\s*",
          "captures": {
            "1": {
              "name": "variable.other.puppet"
            },
            "2": {
              "name": "punctuation.definition.variable.puppet"
            },
            "3": {
              "name": "keyword.operator.assignment.puppet"
            }
          },
          "end": "(?=,|\\))",
          "name": "meta.function.argument.default.puppet",
          "patterns": [
            {
              "include": "#parameter-default-types"
            }
          ]
        }
      ]
    },
    {
      "captures": {
        "1": {
          "name": "storage.type.puppet"
        },
        "2": {
          "name": "entity.name.section.puppet"
        }
      },
      "match": "^\\s*(\\S+)\\s*{\\s*(['\"].+['\"]):",
      "name": "meta.definition.resource.puppet"
    },
    {
      "match": "\\b(case|if|unless|else|elsif)(?!::)",
      "name": "keyword.control.puppet"
    },
    {
      "match": "((\\$?)\"?[a-zA-Z_\\x{7f}-\\x{ff}][a-zA-Z0-9_\\x{7f}-\\x{ff}]*\"?):(?=\\s+|$)",
      "name": "entity.name.section.puppet"
    },
    {
      "include": "#strings"
    },
    {
      "include": "#variable"
    },
    {
      "include": "#constants"
    },
    {
      "begin": "(?i)\\b(import|include)\\b\\s*",
      "beginCaptures": {
        "1": {
          "name": "keyword.control.import.include.puppet"
        }
      },
      "end": "(?=\\s|$)",
      "name": "meta.include.puppet"
    },
    {
      "match": "\\b\\w+\\s*(?==>)\\s*",
      "name": "constant.other.key.puppet"
    },
    {
      "match": "(?<={)\\s*\\w+\\s*(?=})",
      "name": "constant.other.bareword.puppet"
    },
    {
      "match": "\\b(escape|gsub|alert|crit|debug|notice|defined|emerg|err|failed|file|generate|include|info|realize|search|tag|tagged|template|warning)\\b",
      "name": "support.function.puppet"
    }
  ],
  "repository": {
    "constants": {
      "patterns": [
        {
          "match": "(?i)\\b(false|true|running|undef|present|absent|file|directory)\\b",
          "name": "constant.language.puppet"
        }
      ]
    },
    "double-quoted-string": {
      "begin": "\"",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.string.begin.puppet"
        }
      },
      "end": "\"",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.string.end.puppet"
        }
      },
      "name": "string.quoted.double.puppet",
      "patterns": [
        {
          "include": "#escaped_char"
        },
        {
          "include": "#variable"
        }
      ]
    },
    "escaped_char": {
      "match": "\\\\.",
      "name": "constant.character.escape.puppet"
    },
    "line_comment": {
      "patterns": [
        {
          "captures": {
            "1": {
              "name": "comment.line.number-sign.puppet"
            },
            "2": {
              "name": "punctuation.definition.comment.puppet"
            }
          },
          "match": "^((#).*$\\n?)",
          "name": "meta.comment.full-line.puppet"
        },
        {
          "captures": {
            "1": {
              "name": "punctuation.definition.comment.puppet"
            }
          },
          "match": "(#).*$\\n?",
          "name": "comment.line.number-sign.puppet"
        }
      ]
    },
    "nested_braces": {
      "begin": "\\{",
      "captures": {
        "1": {
          "name": "punctuation.section.scope.puppet"
        }
      },
      "end": "\\}",
      "patterns": [
        {
          "include": "#escaped_char"
        },
        {
          "include": "#nested_braces"
        }
      ]
    },
    "nested_braces_interpolated": {
      "begin": "\\{",
      "captures": {
        "1": {
          "name": "punctuation.section.scope.puppet"
        }
      },
      "end": "\\}",
      "patterns": [
        {
          "include": "#escaped_char"
        },
        {
          "include": "#variable"
        },
        {
          "include": "#nested_braces_interpolated"
        }
      ]
    },
    "nested_brackets": {
      "begin": "\\[",
      "captures": {
        "1": {
          "name": "punctuation.section.scope.puppet"
        }
      },
      "end": "\\]",
      "patterns": [
        {
          "include": "#escaped_char"
        },
        {
          "include": "#nested_brackets"
        }
      ]
    },
    "nested_brackets_interpolated": {
      "begin": "\\[",
      "captures": {
        "1": {
          "name": "punctuation.section.scope.puppet"
        }
      },
      "end": "\\]",
      "patterns": [
        {
          "include": "#escaped_char"
        },
        {
          "include": "#variable"
        },
        {
          "include": "#nested_brackets_interpolated"
        }
      ]
    },
    "nested_parens": {
      "begin": "\\(",
      "captures": {
        "1": {
          "name": "punctuation.section.scope.puppet"
        }
      },
      "end": "\\)",
      "patterns": [
        {
          "include": "#escaped_char"
        },
        {
          "include": "#nested_parens"
        }
      ]
    },
    "nested_parens_interpolated": {
      "begin": "\\(",
      "captures": {
        "1": {
          "name": "punctuation.section.scope.puppet"
        }
      },
      "end": "\\)",
      "patterns": [
        {
          "include": "#escaped_char"
        },
        {
          "include": "#variable"
        },
        {
          "include": "#nested_parens_interpolated"
        }
      ]
    },
    "parameter-default-types": {
      "patterns": [
        {
          "include": "#strings"
        },
        {
          "include": "#numbers"
        },
        {
          "include": "#variables"
        },
        {
          "match": "=",
          "name": "keyword.operator.assignment.php"
        },
        {
          "begin": "(\\[)",
          "beginCaptures": {
            "1": {
              "name": "punctuation.definition.array.begin.puppet"
            }
          },
          "end": "\\]",
          "endCaptures": {
            "0": {
              "name": "punctuation.definition.array.end.puppet"
            }
          },
          "name": "meta.array.php",
          "patterns": [
            {
              "include": "#parameter-default-types"
            }
          ]
        },
        {
          "include": "#constants"
        }
      ]
    },
    "single-quoted-string": {
      "begin": "'",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.string.begin.puppet"
        }
      },
      "end": "'",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.string.end.puppet"
        }
      },
      "name": "string.quoted.single.puppet",
      "patterns": [
        {
          "include": "#escaped_char"
        }
      ]
    },
    "strings": {
      "patterns": [
        {
          "include": "#double-quoted-string"
        },
        {
          "include": "#single-quoted-string"
        }
      ]
    },
    "variable": {
      "patterns": [
        {
          "captures": {
            "1": {
              "name": "punctuation.definition.variable.puppet"
            }
          },
          "match": "(\\$)([a-zA-Zx7f-xff\\$]|::)([a-zA-Z0-9_x7f-xff\\$]|::)*\\b",
          "name": "variable.other.readwrite.global.puppet"
        },
        {
          "captures": {
            "1": {
              "name": "punctuation.definition.variable.puppet"
            },
            "2": {
              "name": "punctuation.definition.variable.puppet"
            }
          },
          "match": "(\\$\\{)(?:[a-zA-Zx7f-xff\\$]|::)(?:[a-zA-Z0-9_x7f-xff\\$]|::)*(\\})",
          "name": "variable.other.readwrite.global.puppet"
        }
      ]
    }
  },
  "scopeName": "source.puppet",
  "uuid": "AAF4E089-E3C9-4FB9-B099-FD2CCBD4E786"
}