<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>name</key>
    <string>leoHover</string>
    <key>scopeName</key>
    <string>source.leo.hover</string>
    <key>scope</key>
    <string>source.leo.hover</string>
    <key>patterns</key>
    <array>
      <dict>
        <key>comment</key>
        <string>Import path construction</string>
        <key>name</key>
        <string>import_path_construction</string>
        <key>match</key>
        <string>\b(import)\b (.*)</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>keyword.control.import.leo.hover</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>path.import.leo.hover</string>
          </dict>
        </dict>
      </dict>
      <dict>
        <key>include</key>
        <string>#struct_keyword</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#record_keyword</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#mapping_keyword</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#signature_keyword</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#future_keyword</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#algorithm_function_keyword</string>
      </dict>
      <dict>
        <key>comment</key>
        <string>Function|Import function first line</string>
        <key>name</key>
        <string>import_function_first_line</string>
        <key>begin</key>
        <string>\b(function|transition|inline)\b (\b\w+\b)</string>
        <key>end</key>
        <string>$</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.type.function.leo.hover</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>name.function.leo.hover</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#param_name</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#core_types</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#external_storage_type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#integer_literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage_type_const</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage_modifier_mutable</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#built-in_core_assign</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#boolean_constant</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#circuit_name</string>
          </dict>
        </array>
      </dict>
      <dict>
        <key>comment</key>
        <string>Async function|Import async function first line</string>
        <key>name</key>
        <string>import_finalize_first_line</string>
        <key>begin</key>
        <string>\b(async)\b \b(function|transition|inline)\b (\b\w+\b)</string>
        <key>end</key>
        <string>$</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>storage.type.async.leo.hover</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>storage.type.function.leo.hover</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>name.function.leo.hover</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#param_name</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#core_types</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#external_storage_type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#integer_literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage_type_const</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage_modifier_mutable</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#built-in_core_assign</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#boolean_constant</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#circuit_name</string>
          </dict>
        </array>
      </dict>
      <dict>
        <key>comment</key>
        <string>Function|Import function first line</string>
        <key>name</key>
        <string>import_function_first_line</string>
        <key>begin</key>
        <string>\b(function)\b (\b\w+\b)</string>
        <key>end</key>
        <string>$</string>
        <key>beginCaptures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>.hover</string>
          </dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>name.function.leo.hover</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#param_name</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#core_types</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#external_storage_type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#integer_literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage_type_const</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage_modifier_mutable</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#built-in_core_assign</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#boolean_constant</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#circuit_name</string>
          </dict>
        </array>
      </dict>
      <dict>
        <key>comment</key>
        <string>Console documented chain</string>
        <key>name</key>
        <string>console_documented_chain</string>
        <key>match</key>
        <string>console\.(\blog\b|\bdebug\b|\berror\b|\bassert\b)</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>entity.name.method.console.leo.hover</string>
          </dict>
        </dict>
      </dict>
      <dict>
        <key>comment</key>
        <string>Circuit documented chain</string>
        <key>name</key>
        <string>circuit_documented_chain</string>
        <key>begin</key>
        <string>(?&lt;=\w)(\.|\:\:)((\b\w+\b\s)|(\b\w+\b\s*(?=:)))</string>
        <key>end</key>
        <string>$</string>
        <key>beginCaptures</key>
        <dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>call.name.method.leo.hover</string>
          </dict>
          <key>4</key>
          <dict>
            <key>name</key>
            <string>access.name.attribute.leo.hover</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#mapping_keyword</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#algorithm_function_keyword</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#param_name</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#core_types</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#external_storage_type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#integer_literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage_type_const</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage_modifier_mutable</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#built-in_core_assign</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#boolean_constant</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#circuit_name</string>
          </dict>
        </array>
      </dict>
      <dict>
        <key>comment</key>
        <string>Group method</string>
        <key>match</key>
        <string>(\bgroup\b)(?=\:\:|\.)</string>
        <key>name</key>
        <string>group.name.method.leo.hover</string>
      </dict>
      <dict>
        <key>comment</key>
        <string>Documented parameter</string>
        <key>name</key>
        <string>documented_parameter</string>
        <key>begin</key>
        <string>(\b\w+\b(?=:(?!:)))</string>
        <key>end</key>
        <string>$</string>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#param_name</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#core_types</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#external_storage_type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#integer_literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage_type_const</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage_modifier_mutable</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#built-in_core_assign</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#boolean_constant</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#circuit_name</string>
          </dict>
        </array>
      </dict>
      <dict>
        <key>comment</key>
        <string>Variable type</string>
        <key>name</key>
        <string>variable_type</string>
        <key>begin</key>
        <string>((let)|(const)) \b\w+\b: </string>
        <key>end</key>
        <string>$</string>
        <key>beginCaptures</key>
        <dict>
          <key>2</key>
          <dict>
            <key>name</key>
            <string>storage.type.let.leo.hover</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>storage.type.const.leo.hover</string>
          </dict>
        </dict>
        <key>patterns</key>
        <array>
          <dict>
            <key>include</key>
            <string>#core_types</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#external_storage_type</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#integer_literal</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage_type_const</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#storage_modifier_mutable</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#built-in_core_assign</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#boolean_constant</string>
          </dict>
          <dict>
            <key>include</key>
            <string>#circuit_name</string>
          </dict>
        </array>
      </dict>
      <dict>
        <key>comment</key>
        <string>Test Context Annotation</string>
        <key>name</key>
        <string>test.context.annotation.leo.hover</string>
        <key>match</key>
        <string>@[a-zA-Z][a-zA-Z0-9_]*</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#core_types</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#external_storage_type</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#integer_literal</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#storage_type_const</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#storage_modifier_mutable</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#built-in_core_assign</string>
      </dict>
      <dict>
        <key>include</key>
        <string>#boolean_constant</string>
      </dict>
    </array>
    <key>repository</key>
    <dict>
      <key>import_keyword</key>
      <dict>
        <key>comment</key>
        <string>Import keyword</string>
        <key>match</key>
        <string>\bimport\b</string>
        <key>name</key>
        <string>keyword.control.import.leo.hover</string>
      </dict>
      <key>struct_keyword</key>
      <dict>
        <key>comment</key>
        <string>Storage type circuit</string>
        <key>match</key>
        <string>(?&lt;!\()\bstruct\b</string>
        <key>name</key>
        <string>storage.type.circuit.leo.hover</string>
      </dict>
      <key>record_keyword</key>
      <dict>
        <key>comment</key>
        <string>Storage type record</string>
        <key>match</key>
        <string>(?&lt;!\()\brecord\b</string>
        <key>name</key>
        <string>storage.type.record.leo.hover</string>
      </dict>
      <key>core_types</key>
      <dict>
        <key>comment</key>
        <string>Built-in/core type</string>
        <key>name</key>
        <string>storage.type.core.leo.hover</string>
        <key>match</key>
        <string>\b(bool|field|u8|u16|u32|u64|u128|i8|i16|i32|i64|i128|string|char|address|signature|group|any|integer|scalar)\b</string>
      </dict>
      <key>mapping_keyword</key>
      <dict>
        <key>comment</key>
        <string>Built-in/core type</string>
        <key>name</key>
        <string>storage.type.mapping.leo.hover</string>
        <key>match</key>
        <string>\b(Mapping|mapping)\b</string>
      </dict>
      <key>signature_keyword</key>
      <dict>
        <key>comment</key>
        <string>Built-in/core type</string>
        <key>name</key>
        <string>storage.type.signature.leo.hover</string>
        <key>match</key>
        <string>\b(signature)\b</string>
      </dict>
      <key>algorithm_function_keyword</key>
      <dict>
        <key>comment</key>
        <string>Built-in/core type</string>
        <key>name</key>
        <string>storage.algorithm.leo.hover</string>
        <key>match</key>
        <string>\b(ChaCha|BHP256|BHP512|BHP768|BHP1024|Pedersen64|Pedersen128|Poseidon2|Poseidon4|Poseidon8|Keccak256|Keccak384|Keccak512|SHA3_256|SHA3_384|SHA3_512|CheatCode)\b</string>
      </dict>
      <key>integer_literal</key>
      <dict>
        <key>comment</key>
        <string>Integer literal (decimal)</string>
        <key>name</key>
        <string>numeric.integer.decimal.leo.hover</string>
        <key>match</key>
        <string>\b((0|[1-9][0-9]*))([ui](8|16|32|64|128))?\b</string>
      </dict>
      <key>storage_modifier_mutable</key>
      <dict>
        <key>comment</key>
        <string>Storage modifier mutable</string>
        <key>name</key>
        <string>storage.modifier.mut.leo.hover</string>
        <key>match</key>
        <string>\bmut\b</string>
      </dict>
      <key>storage_type_const</key>
      <dict>
        <key>comment</key>
        <string>Storage type const</string>
        <key>name</key>
        <string>storage.type.const.leo.hover</string>
        <key>match</key>
        <string>\b(const)\b</string>
      </dict>
      <key>built-in_core_assign</key>
      <dict>
        <key>comment</key>
        <string>Built-in/core assign</string>
        <key>name</key>
        <string>storage.type.assign.leo.hover</string>
        <key>match</key>
        <string>\b(((0|[1-9][0-9]*)(group|field)))|(\(([0-9,\s]+)\)(group))</string>
      </dict>
      <key>boolean_constant</key>
      <dict>
        <key>comment</key>
        <string>Boolean constant</string>
        <key>name</key>
        <string>constant.language.boolean.leo.hover</string>
        <key>match</key>
        <string>\b(true|false)\b</string>
      </dict>
      <key>circuit_name</key>
      <dict>
        <key>comment</key>
        <string>Circuit name</string>
        <key>name</key>
        <string>name.circuit.leo.hover</string>
        <key>match</key>
        <string>\b\w+\b</string>
      </dict>
      <key>param_name</key>
      <dict>
        <key>comment</key>
        <string>Parameter name</string>
        <key>name</key>
        <string>meta.name_params.leo.hover</string>
        <key>match</key>
        <string>\b(\w+)\b:</string>
      </dict>
      <key>external_storage_type</key>
      <dict>
        <key>comment</key>
        <string>External storage type</string>
        <key>match</key>
        <string>(\w+\s*\.\s*aleo\s*)(\/\s*)(\b\w+\s*\b)</string>
        <key>captures</key>
        <dict>
          <key>1</key>
          <dict>
            <key>name</key>
            <string>external.program.name.leo.hover</string>
          </dict>
          <key>3</key>
          <dict>
            <key>name</key>
            <string>external.storage.type.leo.hover</string>
          </dict>
        </dict>
      </dict>
      <key>future_keyword</key>
      <dict>
        <key>comment</key>
        <string>Built-in/core type</string>
        <key>name</key>
        <string>storage.type.future.leo.hover</string>
        <key>match</key>
        <string>\b(Future)\b</string>
      </dict>
    </dict>
  </dict>
</plist>