{
    "fileTypes": [
        "sol"
    ],
    "name": "Solidity",
    "patterns": [
        {
            "include": "#natspec"
        },
        {
            "include": "#declaration-userType"
        },
        {
            "include": "#comment"
        },
        {
            "include": "#operator"
        },
        {
            "include": "#global"
        },
        {
            "include": "#control"
        },
        {
            "include": "#constant"
        },
        {
            "include": "#primitive"
        },
        {
            "include": "#type-primitive"
        },
        {
            "include": "#type-modifier-extended-scope"
        },
        {
            "include": "#declaration"
        },
        {
            "include": "#function-call"
        },
        {
            "include": "#assembly"
        },
        {
            "include": "#punctuation"
        }
    ],
    "repository": {
        "natspec": {
            "patterns": [
                {
                    "begin": "/\\*\\*",
                    "end": "\\*/",
                    "name": "comment.block.documentation",
                    "patterns": [
                        {
                            "include": "#natspec-tags"
                        }
                    ]
                },
                {
                    "begin": "///",
                    "end": "$",
                    "name": "comment.block.documentation",
                    "patterns": [
                        {
                            "include": "#natspec-tags"
                        }
                    ]
                }
            ]
        },
        "natspec-tags": {
            "patterns": [
                {
                    "include": "#comment-todo"
                },
                {
                    "include": "#natspec-tag-title"
                },
                {
                    "include": "#natspec-tag-author"
                },
                {
                    "include": "#natspec-tag-notice"
                },
                {
                    "include": "#natspec-tag-dev"
                },
                {
                    "include": "#natspec-tag-param"
                },
                {
                    "include": "#natspec-tag-return"
                },
                {
                    "include": "#natspec-tag-custom"
                },
                {
                    "include": "#natspec-tag-inheritdoc"
                }
            ]
        },
        "natspec-tag-title": {
            "match": "(@title)\\b",
            "name": "storage.type.title.natspec"
        },
       
        "natspec-tag-author": {
            "match": "(@author)\\b",
            "name": "storage.type.author.natspec"
        },
        "natspec-tag-notice": {
            "match": "(@notice)\\b",
            "name": "storage.type.dev.natspec"
        },
        "natspec-tag-custom": {
            "match": "(@custom:\\w*)\\b",
            "name": "storage.type.dev.natspec"
        },
        "natspec-tag-inheritdoc": {
            "match": "(@inheritdoc)\\b",
            "name": "storage.type.author.natspec"
        },
        "natspec-tag-dev": {
            "match": "(@dev)\\b",
            "name": "storage.type.dev.natspec"
        },
        "natspec-tag-param": {
            "match": "(@param)(\\s+([A-Za-z_]\\w*))?\\b",
            "captures": {
                "1": {
                    "name": "storage.type.param.natspec"
                },
                "3": {
                    "name": "variable.other.natspec"
                }
            }
        },
        "natspec-tag-return": {
            "match": "(@return)(\\s+([A-Za-z_]\\w*))?\\b",
            "captures": {
                "1": {
                    "name": "storage.type.return.natspec"
                },
                "3": {
                    "name": "variable.other.natspec"
                }
            }
        },
        "comment": {
            "patterns": [
                {
                    "include": "#comment-line"
                },
                {
                    "include": "#comment-block"
                }
            ]
        },
        "comment-todo": {
            "match": "(?i)\\b(FIXME|TODO|CHANGED|XXX|IDEA|HACK|NOTE|REVIEW|NB|BUG|QUESTION|COMBAK|TEMP|SUPPRESS|LINT|\\w+-disable|\\w+-suppress)\\b(?-i)",
            "name": "keyword.comment.todo"
        },
        "comment-line": {
            "begin": "(?<!tp:)//",
            "end": "$",
            "name": "comment.line",
            "patterns": [
                {
                    "include": "#comment-todo"
                }
            ]
        },
        "comment-block": {
            "begin": "/\\*",
            "end": "\\*/",
            "name": "comment.block",
            "patterns": [
                {
                    "include": "#comment-todo"
                }
            ]
        },
        "operator": {
            "patterns": [
                {
                    "include": "#operator-logic"
                },
                {
                    "include": "#operator-mapping"
                },
                {
                    "include": "#operator-arithmetic"
                },
                {
                    "include": "#operator-binary"
                },
                {
                    "include": "#operator-assignment"
                }
            ]
        },
        "operator-logic": {
            "match": "(==|\\!=|<(?!<)|<=|>(?!>)|>=|\\&\\&|\\|\\||\\:(?!=)|\\?|\\!)",
            "name": "keyword.operator.logic"
        },
        "operator-mapping": {
            "match": "(=>)",
            "name": "keyword.operator.mapping"
        },
        "operator-arithmetic": {
            "match": "(\\+|\\-|\\/|\\*)",
            "name": "keyword.operator.arithmetic"
        },
        "operator-binary": {
            "match": "(\\^|\\&|\\||<<|>>)",
            "name": "keyword.operator.binary"
        },
        "operator-assignment": {
            "match": "(\\:?=)",
            "name": "keyword.operator.assignment"
        },
        "control": {
            "patterns": [
                {
                    "include": "#control-flow"
                },
                {
                    "include": "#control-using"
                },
                {
                    "include": "#control-import"
                },
                {
                    "include": "#control-pragma"
                },
                {
                    "include": "#control-underscore"
                },
                {
                    "include": "#control-unchecked"
                },
                {
                    "include": "#control-other"
                }
            ]
        },
        "control-flow": {
            "patterns": [
                {
                    "match": "\\b(if|else|for|while|do|break|continue|try|catch|finally|throw|return|global)\\b",
                    "name": "keyword.control.flow"
                },
                {
                    "begin": "\\b(returns)\\b",
                    "beginCaptures": {
                        "1": {
                            "name": "keyword.control.flow.return"
                        }
                    },
                    "end": "(?=\\))",
                    "patterns": [
                        {
                            "include": "#declaration-function-parameters"
                        }
                    ]
                }
            ]
        },
        "control-using": {
            "patterns": [
                {
                    "match": "\\b(using)\\b\\s+\\b([A-Za-z\\d_]+)\\b\\s+\\b(for)\\b\\s+\\b([A-Za-z\\d_]+)",
                    "captures": {
                        "1": {
                            "name": "keyword.control.using"
                        },
                        "2": {
                            "name": "entity.name.type.library"
                        },
                        "3": {
                            "name": "keyword.control.for"
                        },
                        "4": {
                            "name": "entity.name.type"
                        }
                    }
                },
                {
                    "match": "\\b(using)\\b",
                    "name": "keyword.control.using"
                }
            ]
        },
        "control-import": {
            "patterns": [
                {
                    "begin": "\\b(import)\\b",
                    "beginCaptures": {
                        "1": {
                            "name": "keyword.control.import"
                        }
                    },
                    "end": "(?=\\;)",
                    "patterns": [
                        {
                            "begin": "((?=\\{))",
                            "end": "((?=\\}))",
                            "patterns": [
                                {
                                    "match": "\\b(\\w+)\\b",
                                    "name": "entity.name.type.interface"
                                }
                            ]
                        },
                        {
                            "match": "\\b(from)\\b",
                            "name": "keyword.control.import.from"
                        },
                        {
                            "include": "#string"
                        },
                        {
                            "include": "#punctuation"
                        }
                    ]
                },
                {
                    "match": "\\b(import)\\b",
                    "name": "keyword.control.import"
                }
            ]
        },
        "control-unchecked": {
            "match": "\\b(unchecked)\\b",
            "name": "keyword.control.unchecked"
        },
        "control-pragma": {
            "match": "\\b(pragma)(?:\\s+([A-Za-z_]\\w+)\\s+([^\\s]+))?\\b",
            "captures": {
                "1": {
                    "name": "keyword.control.pragma"
                },
                "2": {
                    "name": "entity.name.tag.pragma"
                },
                "3": {
                    "name": "constant.other.pragma"
                }
            }
        },
        "control-underscore": {
            "match": "\\b(_)\\b",
            "name": "constant.other.underscore"
        },
        "control-other": {
            "match": "\\b(new|delete|emit)\\b",
            "name": "keyword.control"
        },
        "constant": {
            "patterns": [
                {
                    "include": "#constant-boolean"
                },
                {
                    "include": "#constant-time"
                },
                {
                    "include": "#constant-currency"
                }
            ]
        },
        "constant-boolean": {
            "match": "\\b(true|false)\\b",
            "name": "constant.language.boolean"
        },
        "constant-time": {
            "match": "\\b(seconds|minutes|hours|days|weeks|years)\\b",
            "name": "constant.language.time"
        },
        "constant-currency": {
            "match": "\\b(ether|wei|gwei|finney|szabo)\\b",
            "name": "constant.language.currency"
        },
        "number-decimal": {
            "match": "\\b([0-9_]+(\\.[0-9_]+)?)\\b",
            "name": "constant.numeric.decimal"
        },
        "number-hex": {
            "match": "\\b(0[xX][a-fA-F0-9]+)\\b",
            "name": "constant.numeric.hexadecimal"
        },
        "number-scientific": {
            "match": "\\b(?:0\\.(?:0[0-9]|[0-9][0-9_]?)|[0-9][0-9_]*(?:\\.\\d{1,2})?)(?:e[+-]?[0-9_]+)?",
            "name": "constant.numeric.scientific"
        },
        "string": {
            "patterns": [
                {
                    "match": "\\\"(?:\\\\\"|[^\\\"])*\\\"",
                    "name": "string.quoted.double"
                },
                {
                    "match": "\\'(?:\\\\'|[^\\'])*\\'",
                    "name": "string.quoted.single"
                }
            ]
        },
        "primitive": {
            "patterns": [
                {
                    "include": "#number-decimal"
                },
                {
                    "include": "#number-hex"
                },
                {
                    "include": "#number-scientific"
                },
                {
                    "include": "#string"
                }
            ]
        },
        "type-primitive": {
            "patterns": [
                {
                    "begin": "\\b(address|string\\d*|bytes\\d*|int\\d*|uint\\d*|bool\\d*)\\b(?:\\[\\])(\\()",
                    "beginCaptures": {
                        "1": {
                            "name": "support.type.primitive"
                        }
                    },
                    "end": "(\\))",
                    "patterns": [
                        {
                            "include": "#primitive"
                        },
                        {
                            "include": "#punctuation"
                        },
                        {
                            "include": "#global"
                        },
                        {
                            "include": "#variable"
                        }
                    ]
                },
                {
                    "match": "\\b(address|string\\d*|bytes\\d*|int\\d*|uint\\d*|bool\\d*)\\b",
                    "name": "support.type.primitive"
                }
            ]
        },
        "global": {
            "patterns": [
                {
                    "include": "#global-variables"
                },
                {
                    "include": "#global-functions"
                }
            ]
        },
        "global-variables": {
            "patterns": [
                {
                    "match": "\\b(this)\\b",
                    "name": "variable.language.this"
                },
                {
                    "match": "\\b(super)\\b",
                    "name": "variable.language.super"
                },
                {
                    "match": "\\b(abi)\\b",
                    "name": "variable.language.builtin.abi"
                },
                {
                    "match": "\\b(msg\\.sender|msg|block|tx|now)\\b",
                    "name": "variable.language.transaction"
                },
                {
                    "match": "\\b(tx\\.origin|tx\\.gasprice|msg\\.data|msg\\.sig|msg\\.value)\\b",
                    "name": "variable.language.transaction"
                }
            ]
        },
        "global-functions": {
            "patterns": [
                {
                    "match": "\\b(require|assert|revert)\\b",
                    "name": "keyword.control.exceptions"
                },
                {
                    "match": "\\b(selfdestruct|suicide)\\b",
                    "name": "keyword.control.contract"
                },
                {
                    "match": "\\b(addmod|mulmod|keccak256|sha256|sha3|ripemd160|ecrecover)\\b",
                    "name": "support.function.math"
                },
                {
                    "match": "\\b(unicode)\\b",
                    "name": "support.function.string"
                },
                {
                    "match": "\\b(blockhash|gasleft)\\b",
                    "name": "variable.language.transaction"
                },
                {
                    "match": "\\b(type)\\b",
                    "name": "variable.language.type"
                }
            ]
        },
        "type-modifier-access": {
            "match": "\\b(internal|external|private|public)\\b",
            "name": "storage.type.modifier.access"
        },
        "type-modifier-payable": {
            "match": "\\b(nonpayable|payable)\\b",
            "name": "storage.type.modifier.payable"
        },
        "type-modifier-constant": {
            "match": "\\b(constant)\\b",
            "name": "storage.type.modifier.readonly"
        },
        "type-modifier-immutable": {
            "match": "\\b(immutable)\\b",
            "name": "storage.type.modifier.readonly"
        },
        "type-modifier-transient": {
            "match": "\\b(transient)\\b",
            "name": "storage.type.modifier.readonly"
        },
        "type-modifier-extended-scope": {
            "match": "\\b(pure|view|inherited|indexed|storage|memory|virtual|calldata|override|abstract)\\b",
            "name": "storage.type.modifier.extendedscope"
        },
        "variable": {
            "patterns": [
                {
                    "match": "\\b(\\_\\w+)\\b",
                    "captures": {
                        "1": {
                            "name": "variable.parameter.function"
                        }
                    }
                },
                {
                    "match": "(?:\\.)(\\w+)\\b",
                    "captures": {
                        "1": {
                            "name": "support.variable.property"
                        }
                    }
                },
                {
                    "match": "\\b(\\w+)\\b",
                    "captures": {
                        "1": {
                            "name": "variable.parameter.other"
                        }
                    }
                }
            ]
        },
        "modifier-call": {
            "patterns": [
                {
                    "include": "#function-call"
                },
                {
                    "match": "\\b(\\w+)\\b",
                    "name": "entity.name.function.modifier"
                }
            ]
        },
        "declaration": {
            "patterns": [
                {
                    "include": "#declaration-contract"
                },
                {
                    "include": "#declaration-userType"
                },
                {
                    "include": "#declaration-interface"
                },
                {
                    "include": "#declaration-library"
                },
                {
                    "include": "#declaration-function"
                },
                {
                    "include": "#declaration-modifier"
                },
                {
                    "include": "#declaration-constructor"
                },
                {
                    "include": "#declaration-event"
                },
                {
                    "include": "#declaration-storage"
                },
                {
                    "include": "#declaration-error"
                }
                
            ]
        },
        "declaration-storage-field": {
            "patterns": [
                {
                    "include": "#comment"
                },
                {
                    "include": "#control"
                },
                {
                    "include": "#type-primitive"
                },
                {
                    "include": "#type-modifier-access"
                },
                {
                    "include": "#type-modifier-immutable"
                },
                {
                    "include": "#type-modifier-transient"
                },
                {
                    "include": "#type-modifier-payable"
                },
                {
                    "include": "#type-modifier-constant"
                },
                {
                    "include": "#primitive"
                },
                {
                    "include": "#constant"
                },
                {
                    "include": "#operator"
                },
                {
                    "include": "#punctuation"
                }
            ]
        },
        "declaration-storage": {
            "patterns": [
                {
                    "include": "#declaration-storage-mapping"
                },
                {
                    "include": "#declaration-struct"
                },
                {
                    "include": "#declaration-enum"
                },
                {
                    "include": "#declaration-storage-field"
                }
            ]
        },
        "declaration-userType": {
            "match": "\\b(type)\\b\\s+(\\w+)\\b\\s+\\b(is)\\b",
            "captures": {
                "1": {
                    "name": "storage.type.userType"
                },
                "2": {
                    "name": "entity.name.type.userType"
                },
                "3": {
                    "name": "storage.modifier.is"
                }
            }
        },  
        "declaration-contract": {
            "patterns": [
                {
                    "begin": "\\b(contract)\\b\\s+(\\w+)\\b\\s+\\b(is)\\b\\s+",
                    "end": "(?=\\{)",
                    "beginCaptures": {
                        "1": {
                            "name": "storage.type.contract"
                        },
                        "2": {
                            "name": "entity.name.type.contract"
                        },
                        "3": {
                            "name": "storage.modifier.is"
                        }
                    },
                    "patterns": [
                        {
                            "match": "\\b(\\w+)\\b",
                            "name": "entity.name.type.contract.extend"
                        }
                    ]
                },
                {
                    "match": "\\b(contract)(\\s+([A-Za-z_]\\w*))?\\b",
                    "captures": {
                        "1": {
                            "name": "storage.type.contract"
                        },
                        "2": {
                            "name": "entity.name.type.contract"
                        }
                    }
                }
                
            ]
        },
        "declaration-interface": {
            "patterns": [
                {
                    "begin": "\\b(interface)\\b\\s+(\\w+)\\b\\s+\\b(is)\\b\\s+",
                    "end": "(?=\\{)",
                    "beginCaptures": {
                        "1": {
                            "name": "storage.type.interface"
                        },
                        "2": {
                            "name": "entity.name.type.interface"
                        },
                        "3": {
                            "name": "storage.modifier.is"
                        }
                    },
                    "patterns": [
                        {
                            "match": "\\b(\\w+)\\b",
                            "name": "entity.name.type.interface.extend"
                        }
                    ]
                },
                {
                    "match": "\\b(interface)(\\s+([A-Za-z_]\\w*))?\\b",
                    "captures": {
                        "1": {
                            "name": "storage.type.interface"
                        },
                        "2": {
                            "name": "entity.name.type.interface"
                        }
                    }
                }
                
            ]
        },
        "declaration-library": {
            "match": "\\b(library)(\\s+([A-Za-z_]\\w*))?\\b",
            "captures": {
                "1": {
                    "name": "storage.type.library"
                },
                "3": {
                    "name": "entity.name.type.library"
                }
            }
        },
        "declaration-struct": {
            "patterns": [
                {
                    "match": "\\b(struct)(\\s+([A-Za-z_]\\w*))?\\b",
                    "captures": {
                        "1": {
                            "name": "storage.type.struct"
                        },
                        "3": {
                            "name": "entity.name.type.struct"
                        }
                    }
                },
                {
                    "begin": "\\b(struct)\\b\\s*(\\w+)?\\b\\s*(?=\\{)",
                    "beginCaptures": {
                        "1": {
                            "name": "storage.type.struct"
                        },
                        "2": {
                            "name": "entity.name.type.struct"
                        }
                    },
                    "end": "(?=\\})",
                    "patterns": [
                        {
                            "include": "#type-primitive"
                        },
                        {
                            "include": "#variable"
                        },
                        {
                            "include": "#punctuation"
                        },
                        {
                            "include": "#comment"
                        }
                    ]
                }
            ]
        },
        "declaration-event": {
            "patterns": [
                {
                    "begin": "\\b(event)\\b(?:\\s+(\\w+)\\b)?",
                    "end": "(?=\\))",
                    "beginCaptures": {
                        "1": {
                            "name": "storage.type.event"
                        },
                        "2": {
                            "name": "entity.name.type.event"
                        }
                    },
                    "patterns": [
                        {
                            "include": "#type-primitive"
                        },
                        {
                            "match": "\\b(?:(indexed)\\s)?(\\w+)(?:,\\s*|)",
                            "captures": {
                                "1": {
                                    "name": "storage.type.modifier.indexed"
                                },
                                "2": {
                                    "name": "variable.parameter.event"
                                }
                            }
                        },
                        {
                            "include": "#punctuation"
                        }
                    ]
                },
                {
                    "match": "\\b(event)(\\s+([A-Za-z_]\\w*))?\\b",
                    "captures": {
                        "1": {
                            "name": "storage.type.event"
                        },
                        "3": {
                            "name": "entity.name.type.event"
                        }
                    }
                }
            ]
        },
        "declaration-constructor": {
            "patterns": [
                {
                    "begin": "\\b(constructor)\\b",
                    "beginCaptures": {
                        "1": {
                            "name": "storage.type.constructor"
                        }
                    },
                    "end": "(?=\\{)",
                    "patterns": [
                        {
                            "begin": "\\G\\s*(?=\\()",
                            "end": "(?=\\))",
                            "patterns": [
                                {
                                    "include": "#declaration-function-parameters"
                                }
                            ]
                        },
                        {
                            "begin": "(?<=\\))",
                            "end": "(?=\\{)",
                            "patterns": [
                                {
                                    "include": "#type-modifier-access"
                                },
                                {
                                    "include": "#function-call"
                                }
                            ]
                        }
                    ]
                },
                {
                    "match": "\\b(constructor)\\b",
                    "captures": {
                        "1": {
                            "name": "storage.type.constructor"
                        }
                    }
                }
            ]
        },
        "declaration-enum": {
            "patterns": [
                {
                    "begin": "\\b(enum)\\s+(\\w+)\\b",
                    "beginCaptures": {
                        "1": {
                            "name": "storage.type.enum"
                        },
                        "2": {
                            "name": "entity.name.type.enum"
                        }
                    },
                    "end": "(?=\\})",
                    "patterns": [
                        {
                            "match": "\\b(\\w+)\\b",
                            "name": "variable.other.enummember"
                        },
                        {
                            "include": "#punctuation"
                        },                        
                        {
                            "include": "#comment"
                        }
                    ]
                },
                {
                    "match": "\\b(enum)(\\s+([A-Za-z_]\\w*))?\\b",
                    "captures": {
                        "1": {
                            "name": "storage.type.enum"
                        },
                        "3": {
                            "name": "entity.name.type.enum"
                        }
                    }
                }
            ]
        },
        "declaration-function-parameters": {
            "begin": "\\G\\s*(?=\\()",
            "end": "(?=\\))",
            "patterns": [
                {
                    "include": "#type-primitive"
                },
                {
                    "include": "#type-modifier-extended-scope"
                },
                {
                    "match": "\\b([A-Z]\\w*)\\b",
                    "captures": {
                        "1": {
                            "name": "storage.type.struct"
                        }
                    }
                },
                {
                    "include": "#variable"
                },
                {
                    "include": "#punctuation"
                },
                {
                    "include": "#comment"
                }
            ]
        },
        "declaration-function": {
            "patterns": [
                {
                    "begin": "\\b(function)\\s+(\\w+)\\b",
                    "beginCaptures": {
                        "1": {
                            "name": "storage.type.function"
                        },
                        "2": {
                            "name": "entity.name.function"
                        }
                    },
                    "end": "(?=\\{|;)",
                    "patterns": [
                        {
                            "include": "#natspec"
                        },
                        {
                            "include": "#global"
                        },
                        {
                            "include": "#declaration-function-parameters"
                        },
                        {
                            "include": "#type-modifier-access"
                        },
                        {
                            "include": "#type-modifier-payable"
                        },
                        {
                            "include": "#type-modifier-immutable"
                        },
                        {
                            "include": "#type-modifier-extended-scope"
                        },
                        {
                            "include": "#control-flow"
                        },
                        {
                            "include": "#function-call"
                        },
                        {
                            "include": "#modifier-call"
                        },
                        {
                            "include": "#punctuation"
                        }
                    ]
                },
                {
                    "match": "\\b(function)\\s+([A-Za-z_]\\w*)\\b",
                    "captures": {
                        "1": {
                            "name": "storage.type.function"
                        },
                        "2": {
                            "name": "entity.name.function"
                        }
                    }
                }
            ]
        },
        "declaration-modifier": {
            "patterns": [
                {
                    "begin": "\\b(modifier)\\b\\s*(\\w+)",
                    "beginCaptures": {
                        "1": {
                            "name": "storage.type.function.modifier"
                        },
                        "2": {
                            "name": "entity.name.function.modifier"
                        }
                    },
                    "end": "(?=\\{)",
                    "patterns": [
                        {
                            "include": "#declaration-function-parameters"
                        },
                        {
                            "begin": "(?<=\\))",
                            "end": "(?=\\{)",
                            "patterns": [
                                {
                                    "include": "#declaration-function-parameters"
                                },
                                {
                                    "include": "#type-modifier-access"
                                },
                                {
                                    "include": "#type-modifier-payable"
                                },
                                {
                                    "include": "#type-modifier-immutable"
                                },
                                {
                                    "include": "#type-modifier-extended-scope"
                                },
                                {
                                    "include": "#function-call"
                                },
                                {
                                    "include": "#modifier-call"
                                },
                                {
                                    "include": "#control-flow"
                                }
                            ]
                        }
                    ]
                },
                {
                    "match": "\\b(modifier)(\\s+([A-Za-z_]\\w*))?\\b",
                    "captures": {
                        "1": {
                            "name": "storage.type.modifier"
                        },
                        "3": {
                            "name": "entity.name.function"
                        }
                    }
                }
            ]
        },
        "declaration-storage-mapping": {
            "patterns": [
                {
                    "begin": "\\b(mapping)\\b",
                    "beginCaptures": {
                        "1": {
                            "name": "storage.type.mapping"
                        }
                    },
                    "end": "(?=\\))",
                    "patterns": [
                        {
                            "include": "#declaration-storage-mapping"
                        },
                        {
                            "include": "#type-primitive"
                        },
                        {
                            "include": "#punctuation"
                        },
                        {
                            "include": "#operator"
                        }
                    ]
                },
                {
                    "match": "\\b(mapping)\\b",
                    "name": "storage.type.mapping"
                }
            ]
        },
        "declaration-error": {
            "match": "\\b(error)(\\s+([A-Za-z_]\\w*))?\\b",
            "captures": {
                "1": {
                    "name": "storage.type.error"
                },
                "3": {
                    "name": "entity.name.type.error"
                }
            }
        },
        "function-call": {
            "match": "\\b([A-Za-z_]\\w*)\\s*(\\()",
            "captures": {
                "1": {
                    "name": "entity.name.function"
                },
                "2": {
                    "name": "punctuation.parameters.begin"
                }
            }
        },
        "assembly": {
            "patterns": [
                {
                    "match": "\\b(assembly)\\b",
                    "name": "keyword.control.assembly"
                },
                {
                    "match": "\\b(let)\\b",
                    "name": "storage.type.assembly"
                }
            ]
        },
        "punctuation": {
            "patterns": [
                {
                    "match": ";",
                    "name": "punctuation.terminator.statement"
                },
                {
                    "match": "\\.",
                    "name": "punctuation.accessor"
                },
                {
                    "match": ",",
                    "name": "punctuation.separator"
                },
                {
                    "match": "\\{",
                    "name": "punctuation.brace.curly.begin"
                },
                {
                    "match": "\\}",
                    "name": "punctuation.brace.curly.end"
                },
                {
                    "match": "\\[",
                    "name": "punctuation.brace.square.begin"
                },
                {
                    "match": "\\]",
                    "name": "punctuation.brace.square.end"
                },
                {
                    "match": "\\(",
                    "name": "punctuation.parameters.begin"
                },
                {
                    "match": "\\)",
                    "name": "punctuation.parameters.end"
                }
            ]
        }
    },
    "scopeName": "source.solidity",
    "uuid": "ad87d2cd-8575-4afe-984e-9421a3788933"

}
