From 893a63196c5dc997abc60bb9b2c3f5dbce2a164b Mon Sep 17 00:00:00 2001
From: Omar Tawfik <15987992+OmarTawfik@users.noreply.github.com>
Date: Tue, 31 Dec 2024 02:32:54 -0800
Subject: [PATCH 1/4] add generated `language-definition.json` (#1206)
cc @AntonyBlakey
---
Cargo.lock | 1 +
.../parse_input_tokens/external_types.rs | 5 +-
.../definition/src/model/built_ins.rs | 14 +
.../language/definition/src/model/manifest.rs | 3 +-
.../src/model/nonterminals/enum_.rs | 2 +
.../src/model/nonterminals/field.rs | 6 +
.../src/model/nonterminals/precedence.rs | 5 +
.../src/model/nonterminals/repeated.rs | 2 +
.../src/model/nonterminals/separated.rs | 2 +
.../src/model/nonterminals/struct_.rs | 3 +
.../src/model/terminals/fragment.rs | 1 +
.../definition/src/model/terminals/keyword.rs | 6 +-
.../definition/src/model/terminals/token.rs | 1 +
.../language/tests/src/pass/tiny_language.rs | 8 +-
.../runtime/generator/src/bindings/mod.rs | 6 +-
crates/codegen/spec/Cargo.toml | 1 +
.../codegen/spec/src/generators/topic_page.rs | 2 +-
crates/codegen/spec/src/lib.rs | 9 +-
.../spec/generated/language-definition.json | 9864 +++++++++++++++++
19 files changed, 9926 insertions(+), 15 deletions(-)
create mode 100644 crates/solidity/outputs/spec/generated/language-definition.json
diff --git a/Cargo.lock b/Cargo.lock
index a5a2c96c1c..f0414f1d46 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -517,6 +517,7 @@ dependencies = [
"infra_utils",
"itertools 0.13.0",
"serde",
+ "serde_json",
]
[[package]]
diff --git a/crates/codegen/language/definition/src/internals/parse_input_tokens/external_types.rs b/crates/codegen/language/definition/src/internals/parse_input_tokens/external_types.rs
index 6f9a17d844..5d6035ca6e 100644
--- a/crates/codegen/language/definition/src/internals/parse_input_tokens/external_types.rs
+++ b/crates/codegen/language/definition/src/internals/parse_input_tokens/external_types.rs
@@ -1,9 +1,8 @@
use std::fmt::Debug;
-use std::path::{Path, PathBuf};
+use std::path::PathBuf;
use std::rc::Rc;
use indexmap::{IndexMap, IndexSet};
-use infra_utils::paths::PathExtensions;
use proc_macro2::Ident;
use semver::Version;
use syn::parse::ParseStream;
@@ -100,7 +99,7 @@ impl ParseInputTokens for PathBuf {
fn parse_value(input: ParseStream<'_>, errors: &mut ErrorsCollection) -> Result {
let value = String::parse_value(input, errors)?;
- Ok(Path::repo_path(value))
+ Ok(PathBuf::from(value))
}
}
diff --git a/crates/codegen/language/definition/src/model/built_ins.rs b/crates/codegen/language/definition/src/model/built_ins.rs
index 741b88b390..6982161b1a 100644
--- a/crates/codegen/language/definition/src/model/built_ins.rs
+++ b/crates/codegen/language/definition/src/model/built_ins.rs
@@ -18,8 +18,14 @@ pub enum BuiltIn {
#[derive_spanned_type(Clone, Debug, ParseInputTokens, WriteOutputTokens)]
pub struct BuiltInFunction {
pub name: String,
+
+ #[serde(skip_serializing_if = "Vec::is_empty")]
pub parameters: Vec,
+
+ #[serde(skip_serializing_if = "Option::is_none")]
pub return_type: Option,
+
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
}
@@ -27,8 +33,14 @@ pub struct BuiltInFunction {
#[derive_spanned_type(Clone, Debug, ParseInputTokens, WriteOutputTokens)]
pub struct BuiltInType {
pub name: String,
+
+ #[serde(skip_serializing_if = "Vec::is_empty")]
pub fields: Vec,
+
+ #[serde(skip_serializing_if = "Vec::is_empty")]
pub functions: Vec,
+
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
}
@@ -36,5 +48,7 @@ pub struct BuiltInType {
#[derive_spanned_type(Clone, Debug, ParseInputTokens, WriteOutputTokens)]
pub struct BuiltInField {
pub definition: String,
+
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
}
diff --git a/crates/codegen/language/definition/src/model/manifest.rs b/crates/codegen/language/definition/src/model/manifest.rs
index cfe1ef7c82..2f19c3fb17 100644
--- a/crates/codegen/language/definition/src/model/manifest.rs
+++ b/crates/codegen/language/definition/src/model/manifest.rs
@@ -167,7 +167,8 @@ impl Section {
#[derive_spanned_type(Clone, Debug, ParseInputTokens, WriteOutputTokens)]
pub struct Topic {
pub title: String,
- pub notes_file: Option,
+
+ #[serde(skip_serializing_if = "Option::is_none")]
pub lexical_context: Option,
pub items: Vec- ,
diff --git a/crates/codegen/language/definition/src/model/nonterminals/enum_.rs b/crates/codegen/language/definition/src/model/nonterminals/enum_.rs
index 28a0c64e9b..02654bf9f0 100644
--- a/crates/codegen/language/definition/src/model/nonterminals/enum_.rs
+++ b/crates/codegen/language/definition/src/model/nonterminals/enum_.rs
@@ -8,6 +8,7 @@ use crate::model::{Identifier, VersionSpecifier};
pub struct EnumItem {
pub name: Identifier,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
pub variants: Vec,
@@ -18,5 +19,6 @@ pub struct EnumItem {
pub struct EnumVariant {
pub reference: Identifier,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
}
diff --git a/crates/codegen/language/definition/src/model/nonterminals/field.rs b/crates/codegen/language/definition/src/model/nonterminals/field.rs
index acb05bfc38..e7abe74b7c 100644
--- a/crates/codegen/language/definition/src/model/nonterminals/field.rs
+++ b/crates/codegen/language/definition/src/model/nonterminals/field.rs
@@ -6,7 +6,10 @@ use crate::model::{Identifier, VersionSpecifier};
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[derive_spanned_type(Clone, Debug, ParseInputTokens, WriteOutputTokens)]
pub struct FieldsErrorRecovery {
+ #[serde(skip_serializing_if = "Option::is_none")]
pub terminator: Option,
+
+ #[serde(skip_serializing_if = "Option::is_none")]
pub delimiters: Option,
}
@@ -15,12 +18,14 @@ pub struct FieldsErrorRecovery {
pub struct FieldDelimiters {
pub open: Identifier,
pub close: Identifier,
+
/// How many tokens have to be matched to trigger the error recovery.
/// For ambiguous syntaxes this needs to be set to at least N, where N
/// is the token lookahead required to disambiguate the syntax.
///
/// By default, we assume no lookahead (0) is required to recover from
/// unrecognized body between delimiters, so it's always triggered.
+ #[serde(skip_serializing_if = "Option::is_none")]
pub terminals_matched_acceptance_threshold: Option,
}
@@ -33,6 +38,7 @@ pub enum Field {
Optional {
reference: Identifier,
+ #[serde(skip_serializing_if = "Option::is_none")]
enabled: Option,
},
}
diff --git a/crates/codegen/language/definition/src/model/nonterminals/precedence.rs b/crates/codegen/language/definition/src/model/nonterminals/precedence.rs
index 5e4f9b4eb8..cd3cbe3ca2 100644
--- a/crates/codegen/language/definition/src/model/nonterminals/precedence.rs
+++ b/crates/codegen/language/definition/src/model/nonterminals/precedence.rs
@@ -11,6 +11,7 @@ use crate::model::{Field, FieldsErrorRecovery, Identifier, VersionSpecifier};
pub struct PrecedenceItem {
pub name: Identifier,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
pub precedence_expressions: Vec>,
@@ -30,9 +31,12 @@ pub struct PrecedenceExpression {
pub struct PrecedenceOperator {
pub model: OperatorModel,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub error_recovery: Option,
+
pub fields: IndexMap,
}
@@ -50,5 +54,6 @@ pub enum OperatorModel {
pub struct PrimaryExpression {
pub reference: Identifier,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
}
diff --git a/crates/codegen/language/definition/src/model/nonterminals/repeated.rs b/crates/codegen/language/definition/src/model/nonterminals/repeated.rs
index b8653d0a9b..4b07fdf593 100644
--- a/crates/codegen/language/definition/src/model/nonterminals/repeated.rs
+++ b/crates/codegen/language/definition/src/model/nonterminals/repeated.rs
@@ -9,7 +9,9 @@ pub struct RepeatedItem {
pub name: Identifier,
pub reference: Identifier,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub allow_empty: Option,
}
diff --git a/crates/codegen/language/definition/src/model/nonterminals/separated.rs b/crates/codegen/language/definition/src/model/nonterminals/separated.rs
index b91ec324c8..dc042198f1 100644
--- a/crates/codegen/language/definition/src/model/nonterminals/separated.rs
+++ b/crates/codegen/language/definition/src/model/nonterminals/separated.rs
@@ -10,7 +10,9 @@ pub struct SeparatedItem {
pub reference: Identifier,
pub separator: Identifier,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub allow_empty: Option,
}
diff --git a/crates/codegen/language/definition/src/model/nonterminals/struct_.rs b/crates/codegen/language/definition/src/model/nonterminals/struct_.rs
index 2fabf7af69..3b7a8ba3aa 100644
--- a/crates/codegen/language/definition/src/model/nonterminals/struct_.rs
+++ b/crates/codegen/language/definition/src/model/nonterminals/struct_.rs
@@ -9,8 +9,11 @@ use crate::model::{Field, FieldsErrorRecovery, Identifier, VersionSpecifier};
pub struct StructItem {
pub name: Identifier,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub error_recovery: Option,
+
pub fields: IndexMap,
}
diff --git a/crates/codegen/language/definition/src/model/terminals/fragment.rs b/crates/codegen/language/definition/src/model/terminals/fragment.rs
index 585cccc12e..6e6fe897fc 100644
--- a/crates/codegen/language/definition/src/model/terminals/fragment.rs
+++ b/crates/codegen/language/definition/src/model/terminals/fragment.rs
@@ -8,6 +8,7 @@ use crate::model::{Identifier, Scanner, VersionSpecifier};
pub struct FragmentItem {
pub name: Identifier,
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
pub scanner: Scanner,
diff --git a/crates/codegen/language/definition/src/model/terminals/keyword.rs b/crates/codegen/language/definition/src/model/terminals/keyword.rs
index eeff982fc1..2222734463 100644
--- a/crates/codegen/language/definition/src/model/terminals/keyword.rs
+++ b/crates/codegen/language/definition/src/model/terminals/keyword.rs
@@ -16,10 +16,14 @@ pub struct KeywordItem {
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[derive_spanned_type(Clone, Debug, ParseInputTokens, WriteOutputTokens)]
pub struct KeywordDefinition {
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
+
/// When the keyword is reserved, i.e. can't be used in other position (e.g. as a name)
+ #[serde(skip_serializing_if = "Option::is_none")]
pub reserved: Option,
- // Underlying keyword scanner (i.e. identifier scanner)
+
+ /// Underlying keyword scanner (i.e. identifier scanner)
pub value: KeywordValue,
}
diff --git a/crates/codegen/language/definition/src/model/terminals/token.rs b/crates/codegen/language/definition/src/model/terminals/token.rs
index 9f39455f4f..2ea24450eb 100644
--- a/crates/codegen/language/definition/src/model/terminals/token.rs
+++ b/crates/codegen/language/definition/src/model/terminals/token.rs
@@ -14,6 +14,7 @@ pub struct TokenItem {
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[derive_spanned_type(Clone, Debug, ParseInputTokens, WriteOutputTokens)]
pub struct TokenDefinition {
+ #[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option,
pub scanner: Scanner,
diff --git a/crates/codegen/language/tests/src/pass/tiny_language.rs b/crates/codegen/language/tests/src/pass/tiny_language.rs
index 6b5652634a..cc9efb0d69 100644
--- a/crates/codegen/language/tests/src/pass/tiny_language.rs
+++ b/crates/codegen/language/tests/src/pass/tiny_language.rs
@@ -1,10 +1,7 @@
-use std::path::Path;
-
use codegen_language_definition::model::{
Field, Item, Language, Scanner, Section, StructItem, TokenDefinition, TokenItem, Topic,
TriviaParser,
};
-use infra_utils::paths::PathExtensions;
use semver::Version;
codegen_language_macros::compile!(Language(
@@ -49,8 +46,8 @@ fn definition() {
tiny::TinyDefinition::create(),
Language {
name: "Tiny".into(),
- documentation_dir: Path::repo_path("tiny/docs"),
- binding_rules_file: Path::repo_path("tiny/bindings/rules.msgb"),
+ documentation_dir: "tiny/docs".into(),
+ binding_rules_file: "tiny/bindings/rules.msgb".into(),
file_extension: Some(".tiny".into()),
root_item: "Foo".into(),
leading_trivia: TriviaParser::Sequence { parsers: [].into() },
@@ -65,7 +62,6 @@ fn definition() {
title: "Section One".into(),
topics: vec![Topic {
title: "Topic One".into(),
- notes_file: None,
lexical_context: None,
items: [
Item::Struct {
diff --git a/crates/codegen/runtime/generator/src/bindings/mod.rs b/crates/codegen/runtime/generator/src/bindings/mod.rs
index 61e9f5687e..4017560cf6 100644
--- a/crates/codegen/runtime/generator/src/bindings/mod.rs
+++ b/crates/codegen/runtime/generator/src/bindings/mod.rs
@@ -1,4 +1,5 @@
use std::collections::BTreeSet;
+use std::path::Path;
use anyhow::Result;
use codegen_language_definition::model;
@@ -17,9 +18,10 @@ pub struct BindingsModel {
impl BindingsModel {
pub fn from_language(language: &model::Language) -> Result {
// We use `CodegenFileSystem` here to ensure the rules are rebuilt if the rules file changes
- let binding_rules_dir = language.binding_rules_file.unwrap_parent();
+ let binding_rules_file = Path::repo_path(&language.binding_rules_file);
+ let binding_rules_dir = binding_rules_file.unwrap_parent();
let mut fs = CodegenFileSystem::new(binding_rules_dir)?;
- let binding_rules_source = fs.read_file(&language.binding_rules_file)?;
+ let binding_rules_source = fs.read_file(&binding_rules_file)?;
let built_ins_versions = language.collect_built_ins_versions();
let file_extension = language.file_extension.clone().unwrap_or_default();
diff --git a/crates/codegen/spec/Cargo.toml b/crates/codegen/spec/Cargo.toml
index 833912f2d0..0753ebb039 100644
--- a/crates/codegen/spec/Cargo.toml
+++ b/crates/codegen/spec/Cargo.toml
@@ -14,6 +14,7 @@ Inflector = { workspace = true }
infra_utils = { workspace = true }
itertools = { workspace = true }
serde = { workspace = true }
+serde_json = { workspace = true }
[lints]
workspace = true
diff --git a/crates/codegen/spec/src/generators/topic_page.rs b/crates/codegen/spec/src/generators/topic_page.rs
index ff939be0a3..26ff17c5f1 100644
--- a/crates/codegen/spec/src/generators/topic_page.rs
+++ b/crates/codegen/spec/src/generators/topic_page.rs
@@ -53,7 +53,7 @@ pub fn generate_topic_page(
}
}
- let documentation_dir = model.language.documentation_dir.strip_repo_root()?;
+ let documentation_dir = &model.language.documentation_dir;
writeln!(buffer)?;
writeln!(
diff --git a/crates/codegen/spec/src/lib.rs b/crates/codegen/spec/src/lib.rs
index 85ca47da4d..1e1f29df5d 100644
--- a/crates/codegen/spec/src/lib.rs
+++ b/crates/codegen/spec/src/lib.rs
@@ -15,6 +15,7 @@ use std::rc::Rc;
use anyhow::Result;
use codegen_language_definition::model::Language;
use infra_utils::codegen::CodegenFileSystem;
+use infra_utils::paths::PathExtensions;
use crate::generators::grammar_ebnf::generate_grammar_ebnf;
use crate::generators::navigation::{SpecDir, SpecPage};
@@ -26,7 +27,13 @@ pub struct Spec;
impl Spec {
pub fn generate(language: Rc, output_dir: &Path) -> Result<()> {
- let mut fs = CodegenFileSystem::new(&language.documentation_dir)?;
+ let documentation_dir = Path::repo_path(&language.documentation_dir);
+ let mut fs = CodegenFileSystem::new(documentation_dir)?;
+
+ fs.write_file(
+ output_dir.join("language-definition.json"),
+ serde_json::to_string(&language)?,
+ )?;
let model = SpecModel::build(language);
let public_dir = Self::generate_public_dir(&model)?;
diff --git a/crates/solidity/outputs/spec/generated/language-definition.json b/crates/solidity/outputs/spec/generated/language-definition.json
new file mode 100644
index 0000000000..3779457f4e
--- /dev/null
+++ b/crates/solidity/outputs/spec/generated/language-definition.json
@@ -0,0 +1,9864 @@
+{
+ "name": "Solidity",
+ "documentation_dir": "crates/solidity/inputs/language/docs",
+ "binding_rules_file": "crates/solidity/inputs/language/bindings/rules.msgb",
+ "file_extension": ".sol",
+ "root_item": "SourceUnit",
+ "leading_trivia": {
+ "OneOrMore": {
+ "parser": {
+ "Choice": {
+ "parsers": [
+ { "Trivia": { "reference": "Whitespace" } },
+ { "Trivia": { "reference": "EndOfLine" } },
+ { "Trivia": { "reference": "SingleLineComment" } },
+ { "Trivia": { "reference": "MultiLineComment" } },
+ { "Trivia": { "reference": "SingleLineNatSpecComment" } },
+ { "Trivia": { "reference": "MultiLineNatSpecComment" } }
+ ]
+ }
+ }
+ }
+ },
+ "trailing_trivia": {
+ "Sequence": {
+ "parsers": [
+ { "Optional": { "parser": { "Trivia": { "reference": "Whitespace" } } } },
+ { "Optional": { "parser": { "Trivia": { "reference": "SingleLineComment" } } } },
+ { "Trivia": { "reference": "EndOfLine" } }
+ ]
+ }
+ },
+ "versions": [
+ "0.4.11",
+ "0.4.12",
+ "0.4.13",
+ "0.4.14",
+ "0.4.15",
+ "0.4.16",
+ "0.4.17",
+ "0.4.18",
+ "0.4.19",
+ "0.4.20",
+ "0.4.21",
+ "0.4.22",
+ "0.4.23",
+ "0.4.24",
+ "0.4.25",
+ "0.4.26",
+ "0.5.0",
+ "0.5.1",
+ "0.5.2",
+ "0.5.3",
+ "0.5.4",
+ "0.5.5",
+ "0.5.6",
+ "0.5.7",
+ "0.5.8",
+ "0.5.9",
+ "0.5.10",
+ "0.5.11",
+ "0.5.12",
+ "0.5.13",
+ "0.5.14",
+ "0.5.15",
+ "0.5.16",
+ "0.5.17",
+ "0.6.0",
+ "0.6.1",
+ "0.6.2",
+ "0.6.3",
+ "0.6.4",
+ "0.6.5",
+ "0.6.6",
+ "0.6.7",
+ "0.6.8",
+ "0.6.9",
+ "0.6.10",
+ "0.6.11",
+ "0.6.12",
+ "0.7.0",
+ "0.7.1",
+ "0.7.2",
+ "0.7.3",
+ "0.7.4",
+ "0.7.5",
+ "0.7.6",
+ "0.8.0",
+ "0.8.1",
+ "0.8.2",
+ "0.8.3",
+ "0.8.4",
+ "0.8.5",
+ "0.8.6",
+ "0.8.7",
+ "0.8.8",
+ "0.8.9",
+ "0.8.10",
+ "0.8.11",
+ "0.8.12",
+ "0.8.13",
+ "0.8.14",
+ "0.8.15",
+ "0.8.16",
+ "0.8.17",
+ "0.8.18",
+ "0.8.19",
+ "0.8.20",
+ "0.8.21",
+ "0.8.22",
+ "0.8.23",
+ "0.8.24",
+ "0.8.25",
+ "0.8.26",
+ "0.8.27",
+ "0.8.28"
+ ],
+ "sections": [
+ {
+ "title": "File Structure",
+ "topics": [
+ { "title": "License Specifiers", "items": [] },
+ {
+ "title": "Source Unit",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "SourceUnit",
+ "fields": { "members": { "Required": { "reference": "SourceUnitMembers" } } }
+ }
+ }
+ },
+ {
+ "Repeated": {
+ "item": { "name": "SourceUnitMembers", "reference": "SourceUnitMember", "allow_empty": true }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "SourceUnitMember",
+ "variants": [
+ { "reference": "PragmaDirective" },
+ { "reference": "ImportDirective" },
+ { "reference": "ContractDefinition" },
+ { "reference": "InterfaceDefinition" },
+ { "reference": "LibraryDefinition" },
+ { "reference": "StructDefinition", "enabled": { "From": { "from": "0.6.0" } } },
+ { "reference": "EnumDefinition", "enabled": { "From": { "from": "0.6.0" } } },
+ { "reference": "FunctionDefinition", "enabled": { "From": { "from": "0.7.1" } } },
+ { "reference": "ErrorDefinition", "enabled": { "From": { "from": "0.8.4" } } },
+ { "reference": "UserDefinedValueTypeDefinition", "enabled": { "From": { "from": "0.8.8" } } },
+ { "reference": "UsingDirective", "enabled": { "From": { "from": "0.8.13" } } },
+ { "reference": "EventDefinition", "enabled": { "From": { "from": "0.8.22" } } },
+ { "reference": "ConstantDefinition", "enabled": { "From": { "from": "0.7.4" } } }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Pragma Directives",
+ "lexical_context": "Pragma",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "PragmaDirective",
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "pragma_keyword": { "Required": { "reference": "PragmaKeyword" } },
+ "pragma": { "Required": { "reference": "Pragma" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "Pragma",
+ "variants": [
+ { "reference": "AbicoderPragma" },
+ { "reference": "ExperimentalPragma" },
+ { "reference": "VersionPragma" }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "AbicoderPragma",
+ "fields": {
+ "abicoder_keyword": { "Required": { "reference": "AbicoderKeyword" } },
+ "version": { "Required": { "reference": "Identifier" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ExperimentalPragma",
+ "fields": {
+ "experimental_keyword": { "Required": { "reference": "ExperimentalKeyword" } },
+ "feature": { "Required": { "reference": "ExperimentalFeature" } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "ExperimentalFeature",
+ "variants": [{ "reference": "Identifier" }, { "reference": "StringLiteral" }]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "VersionPragma",
+ "fields": {
+ "solidity_keyword": { "Required": { "reference": "SolidityKeyword" } },
+ "sets": { "Required": { "reference": "VersionExpressionSets" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": { "name": "VersionExpressionSets", "reference": "VersionExpressionSet", "separator": "BarBar" }
+ }
+ },
+ { "Repeated": { "item": { "name": "VersionExpressionSet", "reference": "VersionExpression" } } },
+ {
+ "Enum": {
+ "item": {
+ "name": "VersionExpression",
+ "variants": [{ "reference": "VersionRange" }, { "reference": "VersionTerm" }]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "VersionRange",
+ "fields": {
+ "start": { "Required": { "reference": "VersionLiteral" } },
+ "minus": { "Required": { "reference": "Minus" } },
+ "end": { "Required": { "reference": "VersionLiteral" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "VersionTerm",
+ "fields": {
+ "operator": { "Optional": { "reference": "VersionOperator" } },
+ "literal": { "Required": { "reference": "VersionLiteral" } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "VersionOperator",
+ "variants": [
+ { "reference": "Caret" },
+ { "reference": "Tilde" },
+ { "reference": "Equal" },
+ { "reference": "LessThan" },
+ { "reference": "GreaterThan" },
+ { "reference": "LessThanEqual" },
+ { "reference": "GreaterThanEqual" }
+ ]
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "VersionLiteral",
+ "variants": [
+ { "reference": "SimpleVersionLiteral" },
+ { "reference": "SingleQuotedVersionLiteral" },
+ { "reference": "DoubleQuotedVersionLiteral" }
+ ]
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": { "name": "SimpleVersionLiteral", "reference": "VersionSpecifier", "separator": "Period" }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "VersionSpecifier",
+ "definitions": [{ "scanner": { "Fragment": { "reference": "VersionSpecifierFragment" } } }]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "SingleQuotedVersionLiteral",
+ "definitions": [
+ {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "'" } },
+ { "Fragment": { "reference": "VersionSpecifierFragment" } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "." } },
+ { "Fragment": { "reference": "VersionSpecifierFragment" } }
+ ]
+ }
+ }
+ }
+ },
+ { "Atom": { "atom": "'" } }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "DoubleQuotedVersionLiteral",
+ "definitions": [
+ {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "\"" } },
+ { "Fragment": { "reference": "VersionSpecifierFragment" } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "." } },
+ { "Fragment": { "reference": "VersionSpecifierFragment" } }
+ ]
+ }
+ }
+ }
+ },
+ { "Atom": { "atom": "\"" } }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Fragment": {
+ "item": {
+ "name": "VersionSpecifierFragment",
+ "scanner": {
+ "OneOrMore": {
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Range": { "inclusive_start": "0", "inclusive_end": "9" } },
+ { "Atom": { "atom": "x" } },
+ { "Atom": { "atom": "X" } },
+ { "Atom": { "atom": "*" } }
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "AbicoderKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "reserved": "Never", "value": { "Atom": { "atom": "abicoder" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ExperimentalKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "reserved": "Never", "value": { "Atom": { "atom": "experimental" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "SolidityKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "reserved": "Never", "value": { "Atom": { "atom": "solidity" } } }]
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Import Directives",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "ImportDirective",
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "import_keyword": { "Required": { "reference": "ImportKeyword" } },
+ "clause": { "Required": { "reference": "ImportClause" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "ImportClause",
+ "variants": [
+ { "reference": "PathImport" },
+ { "reference": "NamedImport" },
+ { "reference": "ImportDeconstruction" }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "PathImport",
+ "fields": {
+ "path": { "Required": { "reference": "StringLiteral" } },
+ "alias": { "Optional": { "reference": "ImportAlias" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "NamedImport",
+ "fields": {
+ "asterisk": { "Required": { "reference": "Asterisk" } },
+ "alias": { "Required": { "reference": "ImportAlias" } },
+ "from_keyword": { "Required": { "reference": "FromKeyword" } },
+ "path": { "Required": { "reference": "StringLiteral" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ImportDeconstruction",
+ "error_recovery": { "delimiters": { "open": "open_brace", "close": "close_brace" } },
+ "fields": {
+ "open_brace": { "Required": { "reference": "OpenBrace" } },
+ "symbols": { "Required": { "reference": "ImportDeconstructionSymbols" } },
+ "close_brace": { "Required": { "reference": "CloseBrace" } },
+ "from_keyword": { "Required": { "reference": "FromKeyword" } },
+ "path": { "Required": { "reference": "StringLiteral" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": {
+ "name": "ImportDeconstructionSymbols",
+ "reference": "ImportDeconstructionSymbol",
+ "separator": "Comma"
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ImportDeconstructionSymbol",
+ "fields": {
+ "name": { "Required": { "reference": "Identifier" } },
+ "alias": { "Optional": { "reference": "ImportAlias" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ImportAlias",
+ "fields": {
+ "as_keyword": { "Required": { "reference": "AsKeyword" } },
+ "identifier": { "Required": { "reference": "Identifier" } }
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Using Directives",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "UsingDirective",
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "using_keyword": { "Required": { "reference": "UsingKeyword" } },
+ "clause": { "Required": { "reference": "UsingClause" } },
+ "for_keyword": { "Required": { "reference": "ForKeyword" } },
+ "target": { "Required": { "reference": "UsingTarget" } },
+ "global_keyword": {
+ "Optional": { "reference": "GlobalKeyword", "enabled": { "From": { "from": "0.8.13" } } }
+ },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "UsingClause",
+ "variants": [
+ { "reference": "IdentifierPath" },
+ { "reference": "UsingDeconstruction", "enabled": { "From": { "from": "0.8.13" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "UsingDeconstruction",
+ "enabled": { "From": { "from": "0.8.13" } },
+ "error_recovery": { "delimiters": { "open": "open_brace", "close": "close_brace" } },
+ "fields": {
+ "open_brace": { "Required": { "reference": "OpenBrace" } },
+ "symbols": { "Required": { "reference": "UsingDeconstructionSymbols" } },
+ "close_brace": { "Required": { "reference": "CloseBrace" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": {
+ "name": "UsingDeconstructionSymbols",
+ "reference": "UsingDeconstructionSymbol",
+ "separator": "Comma",
+ "enabled": { "From": { "from": "0.8.13" } }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "UsingDeconstructionSymbol",
+ "enabled": { "From": { "from": "0.8.13" } },
+ "fields": {
+ "name": { "Required": { "reference": "IdentifierPath" } },
+ "alias": { "Optional": { "reference": "UsingAlias", "enabled": { "From": { "from": "0.8.19" } } } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "UsingAlias",
+ "enabled": { "From": { "from": "0.8.19" } },
+ "fields": {
+ "as_keyword": { "Required": { "reference": "AsKeyword" } },
+ "operator": { "Required": { "reference": "UsingOperator" } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "UsingOperator",
+ "enabled": { "From": { "from": "0.8.19" } },
+ "variants": [
+ { "reference": "Ampersand" },
+ { "reference": "Asterisk" },
+ { "reference": "BangEqual" },
+ { "reference": "Bar" },
+ { "reference": "Caret" },
+ { "reference": "EqualEqual" },
+ { "reference": "GreaterThan" },
+ { "reference": "GreaterThanEqual" },
+ { "reference": "LessThan" },
+ { "reference": "LessThanEqual" },
+ { "reference": "Minus" },
+ { "reference": "Percent" },
+ { "reference": "Plus" },
+ { "reference": "Slash" },
+ { "reference": "Tilde" }
+ ]
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "UsingTarget",
+ "variants": [{ "reference": "TypeName" }, { "reference": "Asterisk" }]
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Trivia",
+ "items": [
+ {
+ "Trivia": {
+ "item": {
+ "name": "Whitespace",
+ "scanner": {
+ "OneOrMore": {
+ "scanner": {
+ "Choice": { "scanners": [{ "Atom": { "atom": " " } }, { "Atom": { "atom": "\t" } }] }
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "Trivia": {
+ "item": {
+ "name": "EndOfLine",
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Atom": { "atom": "\n" } },
+ {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "\r" } },
+ { "Optional": { "scanner": { "Atom": { "atom": "\n" } } } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "Trivia": {
+ "item": {
+ "name": "SingleLineComment",
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ {
+ "TrailingContext": {
+ "scanner": { "Atom": { "atom": "//" } },
+ "not_followed_by": { "Atom": { "atom": "/" } }
+ }
+ },
+ { "ZeroOrMore": { "scanner": { "Not": { "chars": ["\r", "\n"] } } } }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "Trivia": {
+ "item": {
+ "name": "MultiLineComment",
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ {
+ "TrailingContext": {
+ "scanner": { "Atom": { "atom": "/*" } },
+ "not_followed_by": {
+ "Sequence": { "scanners": [{ "Atom": { "atom": "*" } }, { "Not": { "chars": ["/"] } }] }
+ }
+ }
+ },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Not": { "chars": ["*"] } },
+ {
+ "TrailingContext": {
+ "scanner": { "Atom": { "atom": "*" } },
+ "not_followed_by": { "Atom": { "atom": "/" } }
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ { "Atom": { "atom": "*/" } }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "Trivia": {
+ "item": {
+ "name": "SingleLineNatSpecComment",
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "///" } },
+ { "ZeroOrMore": { "scanner": { "Not": { "chars": ["\r", "\n"] } } } }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "Trivia": {
+ "item": {
+ "name": "MultiLineNatSpecComment",
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ {
+ "TrailingContext": {
+ "scanner": { "Atom": { "atom": "/**" } },
+ "not_followed_by": { "Atom": { "atom": "/" } }
+ }
+ },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Not": { "chars": ["*"] } },
+ {
+ "TrailingContext": {
+ "scanner": { "Atom": { "atom": "*" } },
+ "not_followed_by": { "Atom": { "atom": "/" } }
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ { "Atom": { "atom": "*/" } }
+ ]
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ { "title": "Nat Spec Format", "items": [] },
+ {
+ "title": "Keywords",
+ "items": [
+ {
+ "Keyword": {
+ "item": {
+ "name": "AbstractKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "enabled": { "From": { "from": "0.6.0" } }, "value": { "Atom": { "atom": "abstract" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "AddressKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "reserved": "Never", "value": { "Atom": { "atom": "address" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "AfterKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "after" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "AliasKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "alias" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "AnonymousKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "anonymous" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ApplyKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "apply" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "AsKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "as" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "AssemblyKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "assembly" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "AutoKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "auto" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "BoolKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "bool" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "BreakKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "break" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ByteKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "enabled": { "Till": { "till": "0.8.0" } }, "value": { "Atom": { "atom": "byte" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "BytesKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "bytes" } },
+ {
+ "Optional": {
+ "value": {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "1" } },
+ { "Atom": { "atom": "2" } },
+ { "Atom": { "atom": "3" } },
+ { "Atom": { "atom": "4" } },
+ { "Atom": { "atom": "5" } },
+ { "Atom": { "atom": "6" } },
+ { "Atom": { "atom": "7" } },
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "9" } },
+ { "Atom": { "atom": "10" } },
+ { "Atom": { "atom": "11" } },
+ { "Atom": { "atom": "12" } },
+ { "Atom": { "atom": "13" } },
+ { "Atom": { "atom": "14" } },
+ { "Atom": { "atom": "15" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "17" } },
+ { "Atom": { "atom": "18" } },
+ { "Atom": { "atom": "19" } },
+ { "Atom": { "atom": "20" } },
+ { "Atom": { "atom": "21" } },
+ { "Atom": { "atom": "22" } },
+ { "Atom": { "atom": "23" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "25" } },
+ { "Atom": { "atom": "26" } },
+ { "Atom": { "atom": "27" } },
+ { "Atom": { "atom": "28" } },
+ { "Atom": { "atom": "29" } },
+ { "Atom": { "atom": "30" } },
+ { "Atom": { "atom": "31" } },
+ { "Atom": { "atom": "32" } }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "CallDataKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.5.0" } },
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "calldata" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "CaseKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "case" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "CatchKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "enabled": { "From": { "from": "0.6.0" } }, "value": { "Atom": { "atom": "catch" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ConstantKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "constant" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ConstructorKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.4.22" } },
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "constructor" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ContinueKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "continue" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ContractKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "contract" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "CopyOfKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "copyof" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "DaysKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "days" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "DefaultKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "default" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "DefineKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "define" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "DeleteKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "delete" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "DoKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "do" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ElseKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "else" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "EmitKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.4.21" } },
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "emit" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "EnumKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "enum" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ErrorKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.8.4" } },
+ "reserved": "Never",
+ "value": { "Atom": { "atom": "error" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "EtherKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "ether" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "EventKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "event" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ExternalKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "external" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "FallbackKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "reserved": { "From": { "from": "0.6.0" } }, "value": { "Atom": { "atom": "fallback" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "FalseKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "false" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "FinalKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "final" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "FinneyKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "Till": { "till": "0.7.0" } },
+ "reserved": { "Till": { "till": "0.7.0" } },
+ "value": { "Atom": { "atom": "finney" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "FixedKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "value": { "Atom": { "atom": "fixed" } } },
+ {
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "fixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } },
+ { "Atom": { "atom": "88" } },
+ { "Atom": { "atom": "96" } },
+ { "Atom": { "atom": "104" } },
+ { "Atom": { "atom": "112" } },
+ { "Atom": { "atom": "120" } },
+ { "Atom": { "atom": "128" } },
+ { "Atom": { "atom": "136" } },
+ { "Atom": { "atom": "144" } },
+ { "Atom": { "atom": "152" } },
+ { "Atom": { "atom": "160" } },
+ { "Atom": { "atom": "168" } },
+ { "Atom": { "atom": "176" } }
+ ]
+ }
+ },
+ { "Atom": { "atom": "x" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "fixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "184x8" } },
+ { "Atom": { "atom": "184x16" } },
+ { "Atom": { "atom": "184x24" } },
+ { "Atom": { "atom": "184x32" } },
+ { "Atom": { "atom": "184x40" } },
+ { "Atom": { "atom": "184x48" } },
+ { "Atom": { "atom": "184x56" } },
+ { "Atom": { "atom": "184x64" } },
+ { "Atom": { "atom": "184x72" } },
+ { "Atom": { "atom": "192x8" } },
+ { "Atom": { "atom": "192x16" } },
+ { "Atom": { "atom": "192x24" } },
+ { "Atom": { "atom": "192x32" } },
+ { "Atom": { "atom": "192x40" } },
+ { "Atom": { "atom": "192x48" } },
+ { "Atom": { "atom": "192x56" } },
+ { "Atom": { "atom": "192x64" } },
+ { "Atom": { "atom": "200x8" } },
+ { "Atom": { "atom": "200x16" } },
+ { "Atom": { "atom": "200x24" } },
+ { "Atom": { "atom": "200x32" } },
+ { "Atom": { "atom": "200x40" } },
+ { "Atom": { "atom": "200x48" } },
+ { "Atom": { "atom": "200x56" } },
+ { "Atom": { "atom": "208x8" } },
+ { "Atom": { "atom": "208x16" } },
+ { "Atom": { "atom": "208x24" } },
+ { "Atom": { "atom": "208x32" } },
+ { "Atom": { "atom": "208x40" } },
+ { "Atom": { "atom": "208x48" } },
+ { "Atom": { "atom": "216x8" } },
+ { "Atom": { "atom": "216x16" } },
+ { "Atom": { "atom": "216x24" } },
+ { "Atom": { "atom": "216x32" } },
+ { "Atom": { "atom": "216x40" } },
+ { "Atom": { "atom": "224x8" } },
+ { "Atom": { "atom": "224x16" } },
+ { "Atom": { "atom": "224x24" } },
+ { "Atom": { "atom": "224x32" } },
+ { "Atom": { "atom": "232x8" } },
+ { "Atom": { "atom": "232x16" } },
+ { "Atom": { "atom": "232x24" } },
+ { "Atom": { "atom": "240x8" } },
+ { "Atom": { "atom": "240x16" } },
+ { "Atom": { "atom": "248x8" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "reserved": { "From": { "from": "0.4.14" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "fixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "184x80" } },
+ { "Atom": { "atom": "192x72" } },
+ { "Atom": { "atom": "192x80" } },
+ { "Atom": { "atom": "200x64" } },
+ { "Atom": { "atom": "200x72" } },
+ { "Atom": { "atom": "200x80" } },
+ { "Atom": { "atom": "208x56" } },
+ { "Atom": { "atom": "208x64" } },
+ { "Atom": { "atom": "208x72" } },
+ { "Atom": { "atom": "208x80" } },
+ { "Atom": { "atom": "216x48" } },
+ { "Atom": { "atom": "216x56" } },
+ { "Atom": { "atom": "216x64" } },
+ { "Atom": { "atom": "216x72" } },
+ { "Atom": { "atom": "216x80" } },
+ { "Atom": { "atom": "224x40" } },
+ { "Atom": { "atom": "224x48" } },
+ { "Atom": { "atom": "224x56" } },
+ { "Atom": { "atom": "224x64" } },
+ { "Atom": { "atom": "224x72" } },
+ { "Atom": { "atom": "224x80" } },
+ { "Atom": { "atom": "232x32" } },
+ { "Atom": { "atom": "232x40" } },
+ { "Atom": { "atom": "232x48" } },
+ { "Atom": { "atom": "232x56" } },
+ { "Atom": { "atom": "232x64" } },
+ { "Atom": { "atom": "232x72" } },
+ { "Atom": { "atom": "232x80" } },
+ { "Atom": { "atom": "240x24" } },
+ { "Atom": { "atom": "240x32" } },
+ { "Atom": { "atom": "240x40" } },
+ { "Atom": { "atom": "240x48" } },
+ { "Atom": { "atom": "240x56" } },
+ { "Atom": { "atom": "240x64" } },
+ { "Atom": { "atom": "240x72" } },
+ { "Atom": { "atom": "240x80" } },
+ { "Atom": { "atom": "248x16" } },
+ { "Atom": { "atom": "248x24" } },
+ { "Atom": { "atom": "248x32" } },
+ { "Atom": { "atom": "248x40" } },
+ { "Atom": { "atom": "248x48" } },
+ { "Atom": { "atom": "248x56" } },
+ { "Atom": { "atom": "248x64" } },
+ { "Atom": { "atom": "248x72" } },
+ { "Atom": { "atom": "248x80" } },
+ { "Atom": { "atom": "256x8" } },
+ { "Atom": { "atom": "256x16" } },
+ { "Atom": { "atom": "256x24" } },
+ { "Atom": { "atom": "256x32" } },
+ { "Atom": { "atom": "256x40" } },
+ { "Atom": { "atom": "256x48" } },
+ { "Atom": { "atom": "256x56" } },
+ { "Atom": { "atom": "256x64" } },
+ { "Atom": { "atom": "256x72" } },
+ { "Atom": { "atom": "256x80" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "reserved": { "From": { "from": "0.4.14" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "fixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } },
+ { "Atom": { "atom": "88" } },
+ { "Atom": { "atom": "96" } },
+ { "Atom": { "atom": "104" } },
+ { "Atom": { "atom": "112" } },
+ { "Atom": { "atom": "120" } },
+ { "Atom": { "atom": "128" } },
+ { "Atom": { "atom": "136" } },
+ { "Atom": { "atom": "144" } },
+ { "Atom": { "atom": "152" } },
+ { "Atom": { "atom": "160" } },
+ { "Atom": { "atom": "168" } },
+ { "Atom": { "atom": "176" } },
+ { "Atom": { "atom": "184" } },
+ { "Atom": { "atom": "192" } },
+ { "Atom": { "atom": "200" } },
+ { "Atom": { "atom": "208" } },
+ { "Atom": { "atom": "216" } },
+ { "Atom": { "atom": "224" } },
+ { "Atom": { "atom": "232" } },
+ { "Atom": { "atom": "240" } },
+ { "Atom": { "atom": "248" } },
+ { "Atom": { "atom": "256" } }
+ ]
+ }
+ },
+ { "Atom": { "atom": "x" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "0" } },
+ { "Atom": { "atom": "1" } },
+ { "Atom": { "atom": "2" } },
+ { "Atom": { "atom": "3" } },
+ { "Atom": { "atom": "4" } },
+ { "Atom": { "atom": "5" } },
+ { "Atom": { "atom": "6" } },
+ { "Atom": { "atom": "7" } },
+ { "Atom": { "atom": "9" } },
+ { "Atom": { "atom": "10" } },
+ { "Atom": { "atom": "11" } },
+ { "Atom": { "atom": "12" } },
+ { "Atom": { "atom": "13" } },
+ { "Atom": { "atom": "14" } },
+ { "Atom": { "atom": "15" } },
+ { "Atom": { "atom": "17" } },
+ { "Atom": { "atom": "18" } },
+ { "Atom": { "atom": "19" } },
+ { "Atom": { "atom": "20" } },
+ { "Atom": { "atom": "21" } },
+ { "Atom": { "atom": "22" } },
+ { "Atom": { "atom": "23" } },
+ { "Atom": { "atom": "25" } },
+ { "Atom": { "atom": "26" } },
+ { "Atom": { "atom": "27" } },
+ { "Atom": { "atom": "28" } },
+ { "Atom": { "atom": "29" } },
+ { "Atom": { "atom": "30" } },
+ { "Atom": { "atom": "31" } },
+ { "Atom": { "atom": "33" } },
+ { "Atom": { "atom": "34" } },
+ { "Atom": { "atom": "35" } },
+ { "Atom": { "atom": "36" } },
+ { "Atom": { "atom": "37" } },
+ { "Atom": { "atom": "38" } },
+ { "Atom": { "atom": "39" } },
+ { "Atom": { "atom": "41" } },
+ { "Atom": { "atom": "42" } },
+ { "Atom": { "atom": "43" } },
+ { "Atom": { "atom": "44" } },
+ { "Atom": { "atom": "45" } },
+ { "Atom": { "atom": "46" } },
+ { "Atom": { "atom": "47" } },
+ { "Atom": { "atom": "49" } },
+ { "Atom": { "atom": "50" } },
+ { "Atom": { "atom": "51" } },
+ { "Atom": { "atom": "52" } },
+ { "Atom": { "atom": "53" } },
+ { "Atom": { "atom": "54" } },
+ { "Atom": { "atom": "55" } },
+ { "Atom": { "atom": "57" } },
+ { "Atom": { "atom": "58" } },
+ { "Atom": { "atom": "59" } },
+ { "Atom": { "atom": "60" } },
+ { "Atom": { "atom": "61" } },
+ { "Atom": { "atom": "62" } },
+ { "Atom": { "atom": "63" } },
+ { "Atom": { "atom": "65" } },
+ { "Atom": { "atom": "66" } },
+ { "Atom": { "atom": "67" } },
+ { "Atom": { "atom": "68" } },
+ { "Atom": { "atom": "69" } },
+ { "Atom": { "atom": "70" } },
+ { "Atom": { "atom": "71" } },
+ { "Atom": { "atom": "73" } },
+ { "Atom": { "atom": "74" } },
+ { "Atom": { "atom": "75" } },
+ { "Atom": { "atom": "76" } },
+ { "Atom": { "atom": "77" } },
+ { "Atom": { "atom": "78" } },
+ { "Atom": { "atom": "79" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ForKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "for" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "FromKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "reserved": "Never", "value": { "Atom": { "atom": "from" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "FunctionKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "function" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "GlobalKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.8.13" } },
+ "reserved": "Never",
+ "value": { "Atom": { "atom": "global" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "GweiKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.6.11" } },
+ "reserved": { "From": { "from": "0.7.0" } },
+ "value": { "Atom": { "atom": "gwei" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "HexKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "hex" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "HoursKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "hours" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "IfKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "if" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ImmutableKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.6.5" } },
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "immutable" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ImplementsKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "implements" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ImportKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "import" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "IndexedKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "indexed" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "InKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "in" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "InlineKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "inline" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "InterfaceKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "interface" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "InternalKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "internal" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "IntKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "int" } },
+ {
+ "Optional": {
+ "value": {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } },
+ { "Atom": { "atom": "88" } },
+ { "Atom": { "atom": "96" } },
+ { "Atom": { "atom": "104" } },
+ { "Atom": { "atom": "112" } },
+ { "Atom": { "atom": "120" } },
+ { "Atom": { "atom": "128" } },
+ { "Atom": { "atom": "136" } },
+ { "Atom": { "atom": "144" } },
+ { "Atom": { "atom": "152" } },
+ { "Atom": { "atom": "160" } },
+ { "Atom": { "atom": "168" } },
+ { "Atom": { "atom": "176" } },
+ { "Atom": { "atom": "184" } },
+ { "Atom": { "atom": "192" } },
+ { "Atom": { "atom": "200" } },
+ { "Atom": { "atom": "208" } },
+ { "Atom": { "atom": "216" } },
+ { "Atom": { "atom": "224" } },
+ { "Atom": { "atom": "232" } },
+ { "Atom": { "atom": "240" } },
+ { "Atom": { "atom": "248" } },
+ { "Atom": { "atom": "256" } }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "IsKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "is" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "LetKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "let" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "LibraryKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "library" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "MacroKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "macro" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "MappingKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "mapping" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "MatchKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "match" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "MemoryKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "memory" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "MinutesKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "minutes" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ModifierKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "modifier" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "MutableKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "mutable" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "NewKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "new" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "NullKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "null" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "OfKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "of" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "OverrideKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.6.0" } },
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "override" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "PartialKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "partial" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "PayableKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "payable" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "PragmaKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "pragma" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "PrivateKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "private" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "PromiseKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "promise" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "PublicKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "public" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "PureKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "enabled": { "From": { "from": "0.4.16" } }, "value": { "Atom": { "atom": "pure" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ReceiveKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "reserved": { "From": { "from": "0.6.0" } }, "value": { "Atom": { "atom": "receive" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ReferenceKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "reference" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "RelocatableKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "relocatable" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ReturnKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "return" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ReturnsKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "returns" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "RevertKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.8.4" } },
+ "reserved": "Never",
+ "value": { "Atom": { "atom": "revert" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "SealedKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "sealed" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "SecondsKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "seconds" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "SizeOfKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "sizeof" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "StaticKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "static" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "StorageKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "storage" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "StringKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "string" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "StructKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "struct" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "SuperKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "super" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "SupportsKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "supports" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "SwitchKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "switch" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "SzaboKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "Till": { "till": "0.7.0" } },
+ "reserved": { "Till": { "till": "0.7.0" } },
+ "value": { "Atom": { "atom": "szabo" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ThisKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "this" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ThrowKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "enabled": { "Till": { "till": "0.5.0" } }, "value": { "Atom": { "atom": "throw" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "TransientKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.8.27" } },
+ "reserved": "Never",
+ "value": { "Atom": { "atom": "transient" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "TrueKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "true" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "TryKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "enabled": { "From": { "from": "0.6.0" } }, "value": { "Atom": { "atom": "try" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "TypeDefKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "typedef" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "TypeKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "enabled": { "From": { "from": "0.5.3" } }, "value": { "Atom": { "atom": "type" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "TypeOfKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "typeof" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "UfixedKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "value": { "Atom": { "atom": "ufixed" } } },
+ {
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "ufixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } },
+ { "Atom": { "atom": "88" } },
+ { "Atom": { "atom": "96" } },
+ { "Atom": { "atom": "104" } },
+ { "Atom": { "atom": "112" } },
+ { "Atom": { "atom": "120" } },
+ { "Atom": { "atom": "128" } },
+ { "Atom": { "atom": "136" } },
+ { "Atom": { "atom": "144" } },
+ { "Atom": { "atom": "152" } },
+ { "Atom": { "atom": "160" } },
+ { "Atom": { "atom": "168" } },
+ { "Atom": { "atom": "176" } }
+ ]
+ }
+ },
+ { "Atom": { "atom": "x" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "ufixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "184x8" } },
+ { "Atom": { "atom": "184x16" } },
+ { "Atom": { "atom": "184x24" } },
+ { "Atom": { "atom": "184x32" } },
+ { "Atom": { "atom": "184x40" } },
+ { "Atom": { "atom": "184x48" } },
+ { "Atom": { "atom": "184x56" } },
+ { "Atom": { "atom": "184x64" } },
+ { "Atom": { "atom": "184x72" } },
+ { "Atom": { "atom": "192x8" } },
+ { "Atom": { "atom": "192x16" } },
+ { "Atom": { "atom": "192x24" } },
+ { "Atom": { "atom": "192x32" } },
+ { "Atom": { "atom": "192x40" } },
+ { "Atom": { "atom": "192x48" } },
+ { "Atom": { "atom": "192x56" } },
+ { "Atom": { "atom": "192x64" } },
+ { "Atom": { "atom": "200x8" } },
+ { "Atom": { "atom": "200x16" } },
+ { "Atom": { "atom": "200x24" } },
+ { "Atom": { "atom": "200x32" } },
+ { "Atom": { "atom": "200x40" } },
+ { "Atom": { "atom": "200x48" } },
+ { "Atom": { "atom": "200x56" } },
+ { "Atom": { "atom": "208x8" } },
+ { "Atom": { "atom": "208x16" } },
+ { "Atom": { "atom": "208x24" } },
+ { "Atom": { "atom": "208x32" } },
+ { "Atom": { "atom": "208x40" } },
+ { "Atom": { "atom": "208x48" } },
+ { "Atom": { "atom": "216x8" } },
+ { "Atom": { "atom": "216x16" } },
+ { "Atom": { "atom": "216x24" } },
+ { "Atom": { "atom": "216x32" } },
+ { "Atom": { "atom": "216x40" } },
+ { "Atom": { "atom": "224x8" } },
+ { "Atom": { "atom": "224x16" } },
+ { "Atom": { "atom": "224x24" } },
+ { "Atom": { "atom": "224x32" } },
+ { "Atom": { "atom": "232x8" } },
+ { "Atom": { "atom": "232x16" } },
+ { "Atom": { "atom": "232x24" } },
+ { "Atom": { "atom": "240x8" } },
+ { "Atom": { "atom": "240x16" } },
+ { "Atom": { "atom": "248x8" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "reserved": { "From": { "from": "0.4.14" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "ufixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "184x80" } },
+ { "Atom": { "atom": "192x72" } },
+ { "Atom": { "atom": "192x80" } },
+ { "Atom": { "atom": "200x64" } },
+ { "Atom": { "atom": "200x72" } },
+ { "Atom": { "atom": "200x80" } },
+ { "Atom": { "atom": "208x56" } },
+ { "Atom": { "atom": "208x64" } },
+ { "Atom": { "atom": "208x72" } },
+ { "Atom": { "atom": "208x80" } },
+ { "Atom": { "atom": "216x48" } },
+ { "Atom": { "atom": "216x56" } },
+ { "Atom": { "atom": "216x64" } },
+ { "Atom": { "atom": "216x72" } },
+ { "Atom": { "atom": "216x80" } },
+ { "Atom": { "atom": "224x40" } },
+ { "Atom": { "atom": "224x48" } },
+ { "Atom": { "atom": "224x56" } },
+ { "Atom": { "atom": "224x64" } },
+ { "Atom": { "atom": "224x72" } },
+ { "Atom": { "atom": "224x80" } },
+ { "Atom": { "atom": "232x32" } },
+ { "Atom": { "atom": "232x40" } },
+ { "Atom": { "atom": "232x48" } },
+ { "Atom": { "atom": "232x56" } },
+ { "Atom": { "atom": "232x64" } },
+ { "Atom": { "atom": "232x72" } },
+ { "Atom": { "atom": "232x80" } },
+ { "Atom": { "atom": "240x24" } },
+ { "Atom": { "atom": "240x32" } },
+ { "Atom": { "atom": "240x40" } },
+ { "Atom": { "atom": "240x48" } },
+ { "Atom": { "atom": "240x56" } },
+ { "Atom": { "atom": "240x64" } },
+ { "Atom": { "atom": "240x72" } },
+ { "Atom": { "atom": "240x80" } },
+ { "Atom": { "atom": "248x16" } },
+ { "Atom": { "atom": "248x24" } },
+ { "Atom": { "atom": "248x32" } },
+ { "Atom": { "atom": "248x40" } },
+ { "Atom": { "atom": "248x48" } },
+ { "Atom": { "atom": "248x56" } },
+ { "Atom": { "atom": "248x64" } },
+ { "Atom": { "atom": "248x72" } },
+ { "Atom": { "atom": "248x80" } },
+ { "Atom": { "atom": "256x8" } },
+ { "Atom": { "atom": "256x16" } },
+ { "Atom": { "atom": "256x24" } },
+ { "Atom": { "atom": "256x32" } },
+ { "Atom": { "atom": "256x40" } },
+ { "Atom": { "atom": "256x48" } },
+ { "Atom": { "atom": "256x56" } },
+ { "Atom": { "atom": "256x64" } },
+ { "Atom": { "atom": "256x72" } },
+ { "Atom": { "atom": "256x80" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "reserved": { "From": { "from": "0.4.14" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "ufixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } },
+ { "Atom": { "atom": "88" } },
+ { "Atom": { "atom": "96" } },
+ { "Atom": { "atom": "104" } },
+ { "Atom": { "atom": "112" } },
+ { "Atom": { "atom": "120" } },
+ { "Atom": { "atom": "128" } },
+ { "Atom": { "atom": "136" } },
+ { "Atom": { "atom": "144" } },
+ { "Atom": { "atom": "152" } },
+ { "Atom": { "atom": "160" } },
+ { "Atom": { "atom": "168" } },
+ { "Atom": { "atom": "176" } },
+ { "Atom": { "atom": "184" } },
+ { "Atom": { "atom": "192" } },
+ { "Atom": { "atom": "200" } },
+ { "Atom": { "atom": "208" } },
+ { "Atom": { "atom": "216" } },
+ { "Atom": { "atom": "224" } },
+ { "Atom": { "atom": "232" } },
+ { "Atom": { "atom": "240" } },
+ { "Atom": { "atom": "248" } },
+ { "Atom": { "atom": "256" } }
+ ]
+ }
+ },
+ { "Atom": { "atom": "x" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "0" } },
+ { "Atom": { "atom": "1" } },
+ { "Atom": { "atom": "2" } },
+ { "Atom": { "atom": "3" } },
+ { "Atom": { "atom": "4" } },
+ { "Atom": { "atom": "5" } },
+ { "Atom": { "atom": "6" } },
+ { "Atom": { "atom": "7" } },
+ { "Atom": { "atom": "9" } },
+ { "Atom": { "atom": "10" } },
+ { "Atom": { "atom": "11" } },
+ { "Atom": { "atom": "12" } },
+ { "Atom": { "atom": "13" } },
+ { "Atom": { "atom": "14" } },
+ { "Atom": { "atom": "15" } },
+ { "Atom": { "atom": "17" } },
+ { "Atom": { "atom": "18" } },
+ { "Atom": { "atom": "19" } },
+ { "Atom": { "atom": "20" } },
+ { "Atom": { "atom": "21" } },
+ { "Atom": { "atom": "22" } },
+ { "Atom": { "atom": "23" } },
+ { "Atom": { "atom": "25" } },
+ { "Atom": { "atom": "26" } },
+ { "Atom": { "atom": "27" } },
+ { "Atom": { "atom": "28" } },
+ { "Atom": { "atom": "29" } },
+ { "Atom": { "atom": "30" } },
+ { "Atom": { "atom": "31" } },
+ { "Atom": { "atom": "33" } },
+ { "Atom": { "atom": "34" } },
+ { "Atom": { "atom": "35" } },
+ { "Atom": { "atom": "36" } },
+ { "Atom": { "atom": "37" } },
+ { "Atom": { "atom": "38" } },
+ { "Atom": { "atom": "39" } },
+ { "Atom": { "atom": "41" } },
+ { "Atom": { "atom": "42" } },
+ { "Atom": { "atom": "43" } },
+ { "Atom": { "atom": "44" } },
+ { "Atom": { "atom": "45" } },
+ { "Atom": { "atom": "46" } },
+ { "Atom": { "atom": "47" } },
+ { "Atom": { "atom": "49" } },
+ { "Atom": { "atom": "50" } },
+ { "Atom": { "atom": "51" } },
+ { "Atom": { "atom": "52" } },
+ { "Atom": { "atom": "53" } },
+ { "Atom": { "atom": "54" } },
+ { "Atom": { "atom": "55" } },
+ { "Atom": { "atom": "57" } },
+ { "Atom": { "atom": "58" } },
+ { "Atom": { "atom": "59" } },
+ { "Atom": { "atom": "60" } },
+ { "Atom": { "atom": "61" } },
+ { "Atom": { "atom": "62" } },
+ { "Atom": { "atom": "63" } },
+ { "Atom": { "atom": "65" } },
+ { "Atom": { "atom": "66" } },
+ { "Atom": { "atom": "67" } },
+ { "Atom": { "atom": "68" } },
+ { "Atom": { "atom": "69" } },
+ { "Atom": { "atom": "70" } },
+ { "Atom": { "atom": "71" } },
+ { "Atom": { "atom": "73" } },
+ { "Atom": { "atom": "74" } },
+ { "Atom": { "atom": "75" } },
+ { "Atom": { "atom": "76" } },
+ { "Atom": { "atom": "77" } },
+ { "Atom": { "atom": "78" } },
+ { "Atom": { "atom": "79" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "UintKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "uint" } },
+ {
+ "Optional": {
+ "value": {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } },
+ { "Atom": { "atom": "88" } },
+ { "Atom": { "atom": "96" } },
+ { "Atom": { "atom": "104" } },
+ { "Atom": { "atom": "112" } },
+ { "Atom": { "atom": "120" } },
+ { "Atom": { "atom": "128" } },
+ { "Atom": { "atom": "136" } },
+ { "Atom": { "atom": "144" } },
+ { "Atom": { "atom": "152" } },
+ { "Atom": { "atom": "160" } },
+ { "Atom": { "atom": "168" } },
+ { "Atom": { "atom": "176" } },
+ { "Atom": { "atom": "184" } },
+ { "Atom": { "atom": "192" } },
+ { "Atom": { "atom": "200" } },
+ { "Atom": { "atom": "208" } },
+ { "Atom": { "atom": "216" } },
+ { "Atom": { "atom": "224" } },
+ { "Atom": { "atom": "232" } },
+ { "Atom": { "atom": "240" } },
+ { "Atom": { "atom": "248" } },
+ { "Atom": { "atom": "256" } }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "UncheckedKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.8.0" } },
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "unchecked" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "UsingKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "using" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "VarKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "enabled": { "Till": { "till": "0.5.0" } }, "value": { "Atom": { "atom": "var" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "ViewKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "enabled": { "From": { "from": "0.4.16" } }, "value": { "Atom": { "atom": "view" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "VirtualKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.6.0" } },
+ "reserved": { "From": { "from": "0.6.0" } },
+ "value": { "Atom": { "atom": "virtual" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "WeeksKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "weeks" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "WeiKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "wei" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "WhileKeyword",
+ "identifier": "Identifier",
+ "definitions": [{ "value": { "Atom": { "atom": "while" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YearsKeyword",
+ "identifier": "Identifier",
+ "definitions": [
+ { "enabled": { "Till": { "till": "0.5.0" } }, "value": { "Atom": { "atom": "years" } } }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Punctuation",
+ "items": [
+ {
+ "Token": { "item": { "name": "OpenParen", "definitions": [{ "scanner": { "Atom": { "atom": "(" } } }] } }
+ },
+ {
+ "Token": { "item": { "name": "CloseParen", "definitions": [{ "scanner": { "Atom": { "atom": ")" } } }] } }
+ },
+ {
+ "Token": {
+ "item": { "name": "OpenBracket", "definitions": [{ "scanner": { "Atom": { "atom": "[" } } }] }
+ }
+ },
+ {
+ "Token": {
+ "item": { "name": "CloseBracket", "definitions": [{ "scanner": { "Atom": { "atom": "]" } } }] }
+ }
+ },
+ {
+ "Token": { "item": { "name": "OpenBrace", "definitions": [{ "scanner": { "Atom": { "atom": "{" } } }] } }
+ },
+ {
+ "Token": { "item": { "name": "CloseBrace", "definitions": [{ "scanner": { "Atom": { "atom": "}" } } }] } }
+ },
+ { "Token": { "item": { "name": "Comma", "definitions": [{ "scanner": { "Atom": { "atom": "," } } }] } } },
+ { "Token": { "item": { "name": "Period", "definitions": [{ "scanner": { "Atom": { "atom": "." } } }] } } },
+ {
+ "Token": {
+ "item": { "name": "QuestionMark", "definitions": [{ "scanner": { "Atom": { "atom": "?" } } }] }
+ }
+ },
+ {
+ "Token": { "item": { "name": "Semicolon", "definitions": [{ "scanner": { "Atom": { "atom": ";" } } }] } }
+ },
+ { "Token": { "item": { "name": "Colon", "definitions": [{ "scanner": { "Atom": { "atom": ":" } } }] } } },
+ {
+ "Token": {
+ "item": { "name": "ColonEqual", "definitions": [{ "scanner": { "Atom": { "atom": ":=" } } }] }
+ }
+ },
+ { "Token": { "item": { "name": "Equal", "definitions": [{ "scanner": { "Atom": { "atom": "=" } } }] } } },
+ {
+ "Token": {
+ "item": {
+ "name": "EqualColon",
+ "definitions": [
+ { "enabled": { "Till": { "till": "0.5.0" } }, "scanner": { "Atom": { "atom": "=:" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": { "name": "EqualEqual", "definitions": [{ "scanner": { "Atom": { "atom": "==" } } }] }
+ }
+ },
+ {
+ "Token": {
+ "item": { "name": "EqualGreaterThan", "definitions": [{ "scanner": { "Atom": { "atom": "=>" } } }] }
+ }
+ },
+ {
+ "Token": { "item": { "name": "Asterisk", "definitions": [{ "scanner": { "Atom": { "atom": "*" } } }] } }
+ },
+ {
+ "Token": {
+ "item": { "name": "AsteriskEqual", "definitions": [{ "scanner": { "Atom": { "atom": "*=" } } }] }
+ }
+ },
+ {
+ "Token": {
+ "item": { "name": "AsteriskAsterisk", "definitions": [{ "scanner": { "Atom": { "atom": "**" } } }] }
+ }
+ },
+ { "Token": { "item": { "name": "Bar", "definitions": [{ "scanner": { "Atom": { "atom": "|" } } }] } } },
+ {
+ "Token": { "item": { "name": "BarEqual", "definitions": [{ "scanner": { "Atom": { "atom": "|=" } } }] } }
+ },
+ { "Token": { "item": { "name": "BarBar", "definitions": [{ "scanner": { "Atom": { "atom": "||" } } }] } } },
+ {
+ "Token": { "item": { "name": "Ampersand", "definitions": [{ "scanner": { "Atom": { "atom": "&" } } }] } }
+ },
+ {
+ "Token": {
+ "item": { "name": "AmpersandEqual", "definitions": [{ "scanner": { "Atom": { "atom": "&=" } } }] }
+ }
+ },
+ {
+ "Token": {
+ "item": { "name": "AmpersandAmpersand", "definitions": [{ "scanner": { "Atom": { "atom": "&&" } } }] }
+ }
+ },
+ {
+ "Token": { "item": { "name": "LessThan", "definitions": [{ "scanner": { "Atom": { "atom": "<" } } }] } }
+ },
+ {
+ "Token": {
+ "item": { "name": "LessThanEqual", "definitions": [{ "scanner": { "Atom": { "atom": "<=" } } }] }
+ }
+ },
+ {
+ "Token": {
+ "item": { "name": "LessThanLessThan", "definitions": [{ "scanner": { "Atom": { "atom": "<<" } } }] }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "LessThanLessThanEqual",
+ "definitions": [{ "scanner": { "Atom": { "atom": "<<=" } } }]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": { "name": "GreaterThan", "definitions": [{ "scanner": { "Atom": { "atom": ">" } } }] }
+ }
+ },
+ {
+ "Token": {
+ "item": { "name": "GreaterThanEqual", "definitions": [{ "scanner": { "Atom": { "atom": ">=" } } }] }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "GreaterThanGreaterThan",
+ "definitions": [{ "scanner": { "Atom": { "atom": ">>" } } }]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "GreaterThanGreaterThanEqual",
+ "definitions": [{ "scanner": { "Atom": { "atom": ">>=" } } }]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "GreaterThanGreaterThanGreaterThan",
+ "definitions": [{ "scanner": { "Atom": { "atom": ">>>" } } }]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "GreaterThanGreaterThanGreaterThanEqual",
+ "definitions": [{ "scanner": { "Atom": { "atom": ">>>=" } } }]
+ }
+ }
+ },
+ { "Token": { "item": { "name": "Plus", "definitions": [{ "scanner": { "Atom": { "atom": "+" } } }] } } },
+ {
+ "Token": { "item": { "name": "PlusEqual", "definitions": [{ "scanner": { "Atom": { "atom": "+=" } } }] } }
+ },
+ {
+ "Token": { "item": { "name": "PlusPlus", "definitions": [{ "scanner": { "Atom": { "atom": "++" } } }] } }
+ },
+ { "Token": { "item": { "name": "Minus", "definitions": [{ "scanner": { "Atom": { "atom": "-" } } }] } } },
+ {
+ "Token": {
+ "item": { "name": "MinusEqual", "definitions": [{ "scanner": { "Atom": { "atom": "-=" } } }] }
+ }
+ },
+ {
+ "Token": {
+ "item": { "name": "MinusMinus", "definitions": [{ "scanner": { "Atom": { "atom": "--" } } }] }
+ }
+ },
+ {
+ "Token": {
+ "item": { "name": "MinusGreaterThan", "definitions": [{ "scanner": { "Atom": { "atom": "->" } } }] }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "Slash",
+ "definitions": [
+ {
+ "scanner": {
+ "TrailingContext": {
+ "scanner": { "Atom": { "atom": "/" } },
+ "not_followed_by": {
+ "Choice": {
+ "scanners": [
+ { "Atom": { "atom": "*" } },
+ { "Atom": { "atom": "/" } },
+ { "Atom": { "atom": "=" } }
+ ]
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": { "name": "SlashEqual", "definitions": [{ "scanner": { "Atom": { "atom": "/=" } } }] }
+ }
+ },
+ { "Token": { "item": { "name": "Percent", "definitions": [{ "scanner": { "Atom": { "atom": "%" } } }] } } },
+ {
+ "Token": {
+ "item": { "name": "PercentEqual", "definitions": [{ "scanner": { "Atom": { "atom": "%=" } } }] }
+ }
+ },
+ { "Token": { "item": { "name": "Bang", "definitions": [{ "scanner": { "Atom": { "atom": "!" } } }] } } },
+ {
+ "Token": { "item": { "name": "BangEqual", "definitions": [{ "scanner": { "Atom": { "atom": "!=" } } }] } }
+ },
+ { "Token": { "item": { "name": "Caret", "definitions": [{ "scanner": { "Atom": { "atom": "^" } } }] } } },
+ {
+ "Token": {
+ "item": { "name": "CaretEqual", "definitions": [{ "scanner": { "Atom": { "atom": "^=" } } }] }
+ }
+ },
+ { "Token": { "item": { "name": "Tilde", "definitions": [{ "scanner": { "Atom": { "atom": "~" } } }] } } }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "Definitions",
+ "topics": [
+ {
+ "title": "Contracts",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "ContractDefinition",
+ "error_recovery": { "delimiters": { "open": "open_brace", "close": "close_brace" } },
+ "fields": {
+ "abstract_keyword": {
+ "Optional": { "reference": "AbstractKeyword", "enabled": { "From": { "from": "0.6.0" } } }
+ },
+ "contract_keyword": { "Required": { "reference": "ContractKeyword" } },
+ "name": { "Required": { "reference": "Identifier" } },
+ "inheritance": { "Optional": { "reference": "InheritanceSpecifier" } },
+ "open_brace": { "Required": { "reference": "OpenBrace" } },
+ "members": { "Required": { "reference": "ContractMembers" } },
+ "close_brace": { "Required": { "reference": "CloseBrace" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "InheritanceSpecifier",
+ "fields": {
+ "is_keyword": { "Required": { "reference": "IsKeyword" } },
+ "types": { "Required": { "reference": "InheritanceTypes" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": { "name": "InheritanceTypes", "reference": "InheritanceType", "separator": "Comma" }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "InheritanceType",
+ "fields": {
+ "type_name": { "Required": { "reference": "IdentifierPath" } },
+ "arguments": { "Optional": { "reference": "ArgumentsDeclaration" } }
+ }
+ }
+ }
+ },
+ {
+ "Repeated": { "item": { "name": "ContractMembers", "reference": "ContractMember", "allow_empty": true } }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "ContractMember",
+ "variants": [
+ { "reference": "UsingDirective" },
+ { "reference": "FunctionDefinition" },
+ { "reference": "ConstructorDefinition", "enabled": { "From": { "from": "0.4.22" } } },
+ { "reference": "ReceiveFunctionDefinition", "enabled": { "From": { "from": "0.6.0" } } },
+ { "reference": "FallbackFunctionDefinition", "enabled": { "From": { "from": "0.6.0" } } },
+ { "reference": "UnnamedFunctionDefinition", "enabled": { "Till": { "till": "0.6.0" } } },
+ { "reference": "ModifierDefinition" },
+ { "reference": "StructDefinition" },
+ { "reference": "EnumDefinition" },
+ { "reference": "EventDefinition" },
+ { "reference": "ErrorDefinition", "enabled": { "From": { "from": "0.8.4" } } },
+ { "reference": "UserDefinedValueTypeDefinition", "enabled": { "From": { "from": "0.8.8" } } },
+ { "reference": "StateVariableDefinition" }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Interfaces",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "InterfaceDefinition",
+ "error_recovery": { "delimiters": { "open": "open_brace", "close": "close_brace" } },
+ "fields": {
+ "interface_keyword": { "Required": { "reference": "InterfaceKeyword" } },
+ "name": { "Required": { "reference": "Identifier" } },
+ "inheritance": { "Optional": { "reference": "InheritanceSpecifier" } },
+ "open_brace": { "Required": { "reference": "OpenBrace" } },
+ "members": { "Required": { "reference": "InterfaceMembers" } },
+ "close_brace": { "Required": { "reference": "CloseBrace" } }
+ }
+ }
+ }
+ },
+ {
+ "Repeated": { "item": { "name": "InterfaceMembers", "reference": "ContractMember", "allow_empty": true } }
+ }
+ ]
+ },
+ {
+ "title": "Libraries",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "LibraryDefinition",
+ "error_recovery": { "delimiters": { "open": "open_brace", "close": "close_brace" } },
+ "fields": {
+ "library_keyword": { "Required": { "reference": "LibraryKeyword" } },
+ "name": { "Required": { "reference": "Identifier" } },
+ "open_brace": { "Required": { "reference": "OpenBrace" } },
+ "members": { "Required": { "reference": "LibraryMembers" } },
+ "close_brace": { "Required": { "reference": "CloseBrace" } }
+ }
+ }
+ }
+ },
+ { "Repeated": { "item": { "name": "LibraryMembers", "reference": "ContractMember", "allow_empty": true } } }
+ ]
+ },
+ {
+ "title": "Structs",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "StructDefinition",
+ "error_recovery": { "delimiters": { "open": "open_brace", "close": "close_brace" } },
+ "fields": {
+ "struct_keyword": { "Required": { "reference": "StructKeyword" } },
+ "name": { "Required": { "reference": "Identifier" } },
+ "open_brace": { "Required": { "reference": "OpenBrace" } },
+ "members": { "Required": { "reference": "StructMembers" } },
+ "close_brace": { "Required": { "reference": "CloseBrace" } }
+ }
+ }
+ }
+ },
+ { "Repeated": { "item": { "name": "StructMembers", "reference": "StructMember", "allow_empty": true } } },
+ {
+ "Struct": {
+ "item": {
+ "name": "StructMember",
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "type_name": { "Required": { "reference": "TypeName" } },
+ "name": { "Required": { "reference": "Identifier" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Enums",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "EnumDefinition",
+ "error_recovery": { "delimiters": { "open": "open_brace", "close": "close_brace" } },
+ "fields": {
+ "enum_keyword": { "Required": { "reference": "EnumKeyword" } },
+ "name": { "Required": { "reference": "Identifier" } },
+ "open_brace": { "Required": { "reference": "OpenBrace" } },
+ "members": { "Required": { "reference": "EnumMembers" } },
+ "close_brace": { "Required": { "reference": "CloseBrace" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": { "name": "EnumMembers", "reference": "Identifier", "separator": "Comma", "allow_empty": true }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Constants",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "ConstantDefinition",
+ "enabled": { "From": { "from": "0.7.4" } },
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "type_name": { "Required": { "reference": "TypeName" } },
+ "constant_keyword": { "Required": { "reference": "ConstantKeyword" } },
+ "name": { "Required": { "reference": "Identifier" } },
+ "equal": { "Required": { "reference": "Equal" } },
+ "value": { "Required": { "reference": "Expression" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "State Variables",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "StateVariableDefinition",
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "type_name": { "Required": { "reference": "TypeName" } },
+ "attributes": { "Required": { "reference": "StateVariableAttributes" } },
+ "name": { "Required": { "reference": "Identifier" } },
+ "value": { "Optional": { "reference": "StateVariableDefinitionValue" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "StateVariableDefinitionValue",
+ "fields": {
+ "equal": { "Required": { "reference": "Equal" } },
+ "value": { "Required": { "reference": "Expression" } }
+ }
+ }
+ }
+ },
+ {
+ "Repeated": {
+ "item": {
+ "name": "StateVariableAttributes",
+ "reference": "StateVariableAttribute",
+ "allow_empty": true
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "StateVariableAttribute",
+ "variants": [
+ { "reference": "OverrideSpecifier", "enabled": { "From": { "from": "0.6.0" } } },
+ { "reference": "ConstantKeyword" },
+ { "reference": "InternalKeyword" },
+ { "reference": "PrivateKeyword" },
+ { "reference": "PublicKeyword" },
+ { "reference": "ImmutableKeyword", "enabled": { "From": { "from": "0.6.5" } } },
+ { "reference": "TransientKeyword", "enabled": { "From": { "from": "0.8.27" } } }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Functions",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "FunctionDefinition",
+ "fields": {
+ "function_keyword": { "Required": { "reference": "FunctionKeyword" } },
+ "name": { "Required": { "reference": "FunctionName" } },
+ "parameters": { "Required": { "reference": "ParametersDeclaration" } },
+ "attributes": { "Required": { "reference": "FunctionAttributes" } },
+ "returns": { "Optional": { "reference": "ReturnsDeclaration" } },
+ "body": { "Required": { "reference": "FunctionBody" } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "FunctionName",
+ "variants": [
+ { "reference": "Identifier" },
+ { "reference": "FallbackKeyword" },
+ { "reference": "ReceiveKeyword" }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ParametersDeclaration",
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "parameters": { "Required": { "reference": "Parameters" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": { "name": "Parameters", "reference": "Parameter", "separator": "Comma", "allow_empty": true }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "Parameter",
+ "fields": {
+ "type_name": { "Required": { "reference": "TypeName" } },
+ "storage_location": { "Optional": { "reference": "StorageLocation" } },
+ "name": { "Optional": { "reference": "Identifier" } }
+ }
+ }
+ }
+ },
+ {
+ "Repeated": {
+ "item": { "name": "FunctionAttributes", "reference": "FunctionAttribute", "allow_empty": true }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "FunctionAttribute",
+ "variants": [
+ { "reference": "ModifierInvocation" },
+ { "reference": "OverrideSpecifier", "enabled": { "From": { "from": "0.6.0" } } },
+ { "reference": "ConstantKeyword", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "reference": "ExternalKeyword" },
+ { "reference": "InternalKeyword" },
+ { "reference": "PayableKeyword" },
+ { "reference": "PrivateKeyword" },
+ { "reference": "PublicKeyword" },
+ { "reference": "PureKeyword", "enabled": { "From": { "from": "0.4.16" } } },
+ { "reference": "ViewKeyword", "enabled": { "From": { "from": "0.4.16" } } },
+ { "reference": "VirtualKeyword", "enabled": { "From": { "from": "0.6.0" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "OverrideSpecifier",
+ "enabled": { "From": { "from": "0.6.0" } },
+ "fields": {
+ "override_keyword": { "Required": { "reference": "OverrideKeyword" } },
+ "overridden": { "Optional": { "reference": "OverridePathsDeclaration" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "OverridePathsDeclaration",
+ "enabled": { "From": { "from": "0.6.0" } },
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "paths": { "Required": { "reference": "OverridePaths" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": {
+ "name": "OverridePaths",
+ "reference": "IdentifierPath",
+ "separator": "Comma",
+ "enabled": { "From": { "from": "0.6.0" } }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ReturnsDeclaration",
+ "fields": {
+ "returns_keyword": { "Required": { "reference": "ReturnsKeyword" } },
+ "variables": { "Required": { "reference": "ParametersDeclaration" } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": { "name": "FunctionBody", "variants": [{ "reference": "Block" }, { "reference": "Semicolon" }] }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ConstructorDefinition",
+ "enabled": { "From": { "from": "0.4.22" } },
+ "fields": {
+ "constructor_keyword": { "Required": { "reference": "ConstructorKeyword" } },
+ "parameters": { "Required": { "reference": "ParametersDeclaration" } },
+ "attributes": { "Required": { "reference": "ConstructorAttributes" } },
+ "body": { "Required": { "reference": "Block" } }
+ }
+ }
+ }
+ },
+ {
+ "Repeated": {
+ "item": {
+ "name": "ConstructorAttributes",
+ "reference": "ConstructorAttribute",
+ "enabled": { "From": { "from": "0.4.22" } },
+ "allow_empty": true
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "ConstructorAttribute",
+ "enabled": { "From": { "from": "0.4.22" } },
+ "variants": [
+ { "reference": "ModifierInvocation" },
+ { "reference": "InternalKeyword" },
+ { "reference": "OverrideKeyword", "enabled": { "Range": { "from": "0.6.0", "till": "0.6.7" } } },
+ { "reference": "PayableKeyword" },
+ { "reference": "PublicKeyword" },
+ { "reference": "VirtualKeyword", "enabled": { "Range": { "from": "0.6.0", "till": "0.6.7" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "UnnamedFunctionDefinition",
+ "enabled": { "Till": { "till": "0.6.0" } },
+ "fields": {
+ "function_keyword": { "Required": { "reference": "FunctionKeyword" } },
+ "parameters": { "Required": { "reference": "ParametersDeclaration" } },
+ "attributes": { "Required": { "reference": "UnnamedFunctionAttributes" } },
+ "body": { "Required": { "reference": "FunctionBody" } }
+ }
+ }
+ }
+ },
+ {
+ "Repeated": {
+ "item": {
+ "name": "UnnamedFunctionAttributes",
+ "reference": "UnnamedFunctionAttribute",
+ "enabled": { "Till": { "till": "0.6.0" } },
+ "allow_empty": true
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "UnnamedFunctionAttribute",
+ "enabled": { "Till": { "till": "0.6.0" } },
+ "variants": [
+ { "reference": "ModifierInvocation" },
+ { "reference": "ConstantKeyword", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "reference": "ExternalKeyword" },
+ { "reference": "InternalKeyword", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "reference": "PayableKeyword" },
+ { "reference": "PrivateKeyword", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "reference": "PublicKeyword", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "reference": "PureKeyword", "enabled": { "Range": { "from": "0.4.16", "till": "0.6.0" } } },
+ { "reference": "ViewKeyword", "enabled": { "Range": { "from": "0.4.16", "till": "0.6.0" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "FallbackFunctionDefinition",
+ "enabled": { "From": { "from": "0.6.0" } },
+ "fields": {
+ "fallback_keyword": { "Required": { "reference": "FallbackKeyword" } },
+ "parameters": { "Required": { "reference": "ParametersDeclaration" } },
+ "attributes": { "Required": { "reference": "FallbackFunctionAttributes" } },
+ "returns": { "Optional": { "reference": "ReturnsDeclaration" } },
+ "body": { "Required": { "reference": "FunctionBody" } }
+ }
+ }
+ }
+ },
+ {
+ "Repeated": {
+ "item": {
+ "name": "FallbackFunctionAttributes",
+ "reference": "FallbackFunctionAttribute",
+ "enabled": { "From": { "from": "0.6.0" } },
+ "allow_empty": true
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "FallbackFunctionAttribute",
+ "enabled": { "From": { "from": "0.6.0" } },
+ "variants": [
+ { "reference": "ModifierInvocation" },
+ { "reference": "OverrideSpecifier" },
+ { "reference": "ExternalKeyword" },
+ { "reference": "PayableKeyword" },
+ { "reference": "PureKeyword" },
+ { "reference": "ViewKeyword" },
+ { "reference": "VirtualKeyword" }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ReceiveFunctionDefinition",
+ "enabled": { "From": { "from": "0.6.0" } },
+ "fields": {
+ "receive_keyword": { "Required": { "reference": "ReceiveKeyword" } },
+ "parameters": { "Required": { "reference": "ParametersDeclaration" } },
+ "attributes": { "Required": { "reference": "ReceiveFunctionAttributes" } },
+ "body": { "Required": { "reference": "FunctionBody" } }
+ }
+ }
+ }
+ },
+ {
+ "Repeated": {
+ "item": {
+ "name": "ReceiveFunctionAttributes",
+ "reference": "ReceiveFunctionAttribute",
+ "enabled": { "From": { "from": "0.6.0" } },
+ "allow_empty": true
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "ReceiveFunctionAttribute",
+ "enabled": { "From": { "from": "0.6.0" } },
+ "variants": [
+ { "reference": "ModifierInvocation" },
+ { "reference": "OverrideSpecifier" },
+ { "reference": "ExternalKeyword" },
+ { "reference": "PayableKeyword" },
+ { "reference": "VirtualKeyword" }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Modifiers",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "ModifierDefinition",
+ "fields": {
+ "modifier_keyword": { "Required": { "reference": "ModifierKeyword" } },
+ "name": { "Required": { "reference": "Identifier" } },
+ "parameters": { "Optional": { "reference": "ParametersDeclaration" } },
+ "attributes": { "Required": { "reference": "ModifierAttributes" } },
+ "body": { "Required": { "reference": "FunctionBody" } }
+ }
+ }
+ }
+ },
+ {
+ "Repeated": {
+ "item": { "name": "ModifierAttributes", "reference": "ModifierAttribute", "allow_empty": true }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "ModifierAttribute",
+ "variants": [
+ { "reference": "OverrideSpecifier", "enabled": { "From": { "from": "0.6.0" } } },
+ { "reference": "VirtualKeyword", "enabled": { "From": { "from": "0.6.0" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ModifierInvocation",
+ "fields": {
+ "name": { "Required": { "reference": "IdentifierPath" } },
+ "arguments": { "Optional": { "reference": "ArgumentsDeclaration" } }
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Events",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "EventDefinition",
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "event_keyword": { "Required": { "reference": "EventKeyword" } },
+ "name": { "Required": { "reference": "Identifier" } },
+ "parameters": { "Required": { "reference": "EventParametersDeclaration" } },
+ "anonymous_keyword": { "Optional": { "reference": "AnonymousKeyword" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "EventParametersDeclaration",
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "parameters": { "Required": { "reference": "EventParameters" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": {
+ "name": "EventParameters",
+ "reference": "EventParameter",
+ "separator": "Comma",
+ "allow_empty": true
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "EventParameter",
+ "fields": {
+ "type_name": { "Required": { "reference": "TypeName" } },
+ "indexed_keyword": { "Optional": { "reference": "IndexedKeyword" } },
+ "name": { "Optional": { "reference": "Identifier" } }
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "User Defined Value Types",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "UserDefinedValueTypeDefinition",
+ "enabled": { "From": { "from": "0.8.8" } },
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "type_keyword": { "Required": { "reference": "TypeKeyword" } },
+ "name": { "Required": { "reference": "Identifier" } },
+ "is_keyword": { "Required": { "reference": "IsKeyword" } },
+ "value_type": { "Required": { "reference": "ElementaryType" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Errors",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "ErrorDefinition",
+ "enabled": { "From": { "from": "0.8.4" } },
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "error_keyword": { "Required": { "reference": "ErrorKeyword" } },
+ "name": { "Required": { "reference": "Identifier" } },
+ "members": { "Required": { "reference": "ErrorParametersDeclaration" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ErrorParametersDeclaration",
+ "enabled": { "From": { "from": "0.8.4" } },
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "parameters": { "Required": { "reference": "ErrorParameters" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": {
+ "name": "ErrorParameters",
+ "reference": "ErrorParameter",
+ "separator": "Comma",
+ "enabled": { "From": { "from": "0.8.4" } },
+ "allow_empty": true
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ErrorParameter",
+ "enabled": { "From": { "from": "0.8.4" } },
+ "fields": {
+ "type_name": { "Required": { "reference": "TypeName" } },
+ "name": { "Optional": { "reference": "Identifier" } }
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "Types",
+ "topics": [
+ {
+ "title": "Advanced Types",
+ "items": [
+ {
+ "Precedence": {
+ "item": {
+ "name": "TypeName",
+ "precedence_expressions": [
+ {
+ "name": "ArrayTypeName",
+ "operators": [
+ {
+ "model": "Postfix",
+ "error_recovery": { "delimiters": { "open": "open_bracket", "close": "close_bracket" } },
+ "fields": {
+ "open_bracket": { "Required": { "reference": "OpenBracket" } },
+ "index": { "Optional": { "reference": "Expression" } },
+ "close_bracket": { "Required": { "reference": "CloseBracket" } }
+ }
+ }
+ ]
+ }
+ ],
+ "primary_expressions": [
+ { "reference": "FunctionType" },
+ { "reference": "MappingType" },
+ { "reference": "ElementaryType" },
+ { "reference": "IdentifierPath" }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "FunctionType",
+ "fields": {
+ "function_keyword": { "Required": { "reference": "FunctionKeyword" } },
+ "parameters": { "Required": { "reference": "ParametersDeclaration" } },
+ "attributes": { "Required": { "reference": "FunctionTypeAttributes" } },
+ "returns": { "Optional": { "reference": "ReturnsDeclaration" } }
+ }
+ }
+ }
+ },
+ {
+ "Repeated": {
+ "item": { "name": "FunctionTypeAttributes", "reference": "FunctionTypeAttribute", "allow_empty": true }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "FunctionTypeAttribute",
+ "variants": [
+ { "reference": "InternalKeyword" },
+ { "reference": "ExternalKeyword" },
+ { "reference": "PrivateKeyword" },
+ { "reference": "PublicKeyword" },
+ { "reference": "ConstantKeyword", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "reference": "PureKeyword", "enabled": { "From": { "from": "0.4.16" } } },
+ { "reference": "ViewKeyword", "enabled": { "From": { "from": "0.4.16" } } },
+ { "reference": "PayableKeyword" }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "MappingType",
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "mapping_keyword": { "Required": { "reference": "MappingKeyword" } },
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "key_type": { "Required": { "reference": "MappingKey" } },
+ "equal_greater_than": { "Required": { "reference": "EqualGreaterThan" } },
+ "value_type": { "Required": { "reference": "MappingValue" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "MappingKey",
+ "fields": {
+ "key_type": { "Required": { "reference": "MappingKeyType" } },
+ "name": { "Optional": { "reference": "Identifier", "enabled": { "From": { "from": "0.8.18" } } } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "MappingKeyType",
+ "variants": [{ "reference": "ElementaryType" }, { "reference": "IdentifierPath" }]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "MappingValue",
+ "fields": {
+ "type_name": { "Required": { "reference": "TypeName" } },
+ "name": { "Optional": { "reference": "Identifier", "enabled": { "From": { "from": "0.8.18" } } } }
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Elementary Types",
+ "items": [
+ {
+ "Enum": {
+ "item": {
+ "name": "ElementaryType",
+ "variants": [
+ { "reference": "BoolKeyword" },
+ { "reference": "ByteKeyword", "enabled": { "Till": { "till": "0.8.0" } } },
+ { "reference": "StringKeyword" },
+ { "reference": "AddressType" },
+ { "reference": "BytesKeyword" },
+ { "reference": "IntKeyword" },
+ { "reference": "UintKeyword" },
+ { "reference": "FixedKeyword" },
+ { "reference": "UfixedKeyword" }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "AddressType",
+ "fields": {
+ "address_keyword": { "Required": { "reference": "AddressKeyword" } },
+ "payable_keyword": { "Optional": { "reference": "PayableKeyword" } }
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "Statements",
+ "topics": [
+ {
+ "title": "Blocks",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "Block",
+ "error_recovery": { "delimiters": { "open": "open_brace", "close": "close_brace" } },
+ "fields": {
+ "open_brace": { "Required": { "reference": "OpenBrace" } },
+ "statements": { "Required": { "reference": "Statements" } },
+ "close_brace": { "Required": { "reference": "CloseBrace" } }
+ }
+ }
+ }
+ },
+ { "Repeated": { "item": { "name": "Statements", "reference": "Statement", "allow_empty": true } } },
+ {
+ "Enum": {
+ "item": {
+ "name": "Statement",
+ "variants": [
+ { "reference": "IfStatement" },
+ { "reference": "ForStatement" },
+ { "reference": "WhileStatement" },
+ { "reference": "DoWhileStatement" },
+ { "reference": "ContinueStatement" },
+ { "reference": "BreakStatement" },
+ { "reference": "ReturnStatement" },
+ { "reference": "ThrowStatement", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "reference": "EmitStatement", "enabled": { "From": { "from": "0.4.21" } } },
+ { "reference": "TryStatement", "enabled": { "From": { "from": "0.6.0" } } },
+ { "reference": "RevertStatement", "enabled": { "From": { "from": "0.8.4" } } },
+ { "reference": "AssemblyStatement" },
+ { "reference": "Block" },
+ { "reference": "UncheckedBlock", "enabled": { "From": { "from": "0.8.0" } } },
+ { "reference": "TupleDeconstructionStatement" },
+ { "reference": "VariableDeclarationStatement" },
+ { "reference": "ExpressionStatement" }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "UncheckedBlock",
+ "enabled": { "From": { "from": "0.8.0" } },
+ "fields": {
+ "unchecked_keyword": { "Required": { "reference": "UncheckedKeyword" } },
+ "block": { "Required": { "reference": "Block" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ExpressionStatement",
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "expression": { "Required": { "reference": "Expression" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "AssemblyStatement",
+ "fields": {
+ "assembly_keyword": { "Required": { "reference": "AssemblyKeyword" } },
+ "label": { "Optional": { "reference": "StringLiteral" } },
+ "flags": { "Optional": { "reference": "AssemblyFlagsDeclaration" } },
+ "body": { "Required": { "reference": "YulBlock" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "AssemblyFlagsDeclaration",
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "flags": { "Required": { "reference": "AssemblyFlags" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } }
+ }
+ }
+ }
+ },
+ { "Separated": { "item": { "name": "AssemblyFlags", "reference": "StringLiteral", "separator": "Comma" } } }
+ ]
+ },
+ {
+ "title": "Declaration Statements",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "TupleDeconstructionStatement",
+ "error_recovery": {
+ "terminator": "semicolon",
+ "delimiters": { "open": "open_paren", "close": "close_paren" }
+ },
+ "fields": {
+ "var_keyword": {
+ "Optional": { "reference": "VarKeyword", "enabled": { "Till": { "till": "0.5.0" } } }
+ },
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "elements": { "Required": { "reference": "TupleDeconstructionElements" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } },
+ "equal": { "Required": { "reference": "Equal" } },
+ "expression": { "Required": { "reference": "Expression" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": {
+ "name": "TupleDeconstructionElements",
+ "reference": "TupleDeconstructionElement",
+ "separator": "Comma"
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "TupleDeconstructionElement",
+ "fields": { "member": { "Optional": { "reference": "TupleMember" } } }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "TupleMember",
+ "variants": [{ "reference": "TypedTupleMember" }, { "reference": "UntypedTupleMember" }]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "TypedTupleMember",
+ "fields": {
+ "type_name": { "Required": { "reference": "TypeName" } },
+ "storage_location": { "Optional": { "reference": "StorageLocation" } },
+ "name": { "Required": { "reference": "Identifier" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "UntypedTupleMember",
+ "fields": {
+ "storage_location": { "Optional": { "reference": "StorageLocation" } },
+ "name": { "Required": { "reference": "Identifier" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "VariableDeclarationStatement",
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "variable_type": { "Required": { "reference": "VariableDeclarationType" } },
+ "storage_location": { "Optional": { "reference": "StorageLocation" } },
+ "name": { "Required": { "reference": "Identifier" } },
+ "value": { "Optional": { "reference": "VariableDeclarationValue" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "VariableDeclarationType",
+ "variants": [
+ { "reference": "TypeName" },
+ { "reference": "VarKeyword", "enabled": { "Till": { "till": "0.5.0" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "VariableDeclarationValue",
+ "fields": {
+ "equal": { "Required": { "reference": "Equal" } },
+ "expression": { "Required": { "reference": "Expression" } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "StorageLocation",
+ "variants": [
+ { "reference": "MemoryKeyword" },
+ { "reference": "StorageKeyword" },
+ { "reference": "CallDataKeyword", "enabled": { "From": { "from": "0.5.0" } } }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Control Statements",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "IfStatement",
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "if_keyword": { "Required": { "reference": "IfKeyword" } },
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "condition": { "Required": { "reference": "Expression" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } },
+ "body": { "Required": { "reference": "Statement" } },
+ "else_branch": { "Optional": { "reference": "ElseBranch" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ElseBranch",
+ "fields": {
+ "else_keyword": { "Required": { "reference": "ElseKeyword" } },
+ "body": { "Required": { "reference": "Statement" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ForStatement",
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "for_keyword": { "Required": { "reference": "ForKeyword" } },
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "initialization": { "Required": { "reference": "ForStatementInitialization" } },
+ "condition": { "Required": { "reference": "ForStatementCondition" } },
+ "iterator": { "Optional": { "reference": "Expression" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } },
+ "body": { "Required": { "reference": "Statement" } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "ForStatementInitialization",
+ "variants": [
+ { "reference": "TupleDeconstructionStatement" },
+ { "reference": "VariableDeclarationStatement" },
+ { "reference": "ExpressionStatement" },
+ { "reference": "Semicolon" }
+ ]
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "ForStatementCondition",
+ "variants": [{ "reference": "ExpressionStatement" }, { "reference": "Semicolon" }]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "WhileStatement",
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "while_keyword": { "Required": { "reference": "WhileKeyword" } },
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "condition": { "Required": { "reference": "Expression" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } },
+ "body": { "Required": { "reference": "Statement" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "DoWhileStatement",
+ "error_recovery": {
+ "terminator": "semicolon",
+ "delimiters": { "open": "open_paren", "close": "close_paren" }
+ },
+ "fields": {
+ "do_keyword": { "Required": { "reference": "DoKeyword" } },
+ "body": { "Required": { "reference": "Statement" } },
+ "while_keyword": { "Required": { "reference": "WhileKeyword" } },
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "condition": { "Required": { "reference": "Expression" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ContinueStatement",
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "continue_keyword": { "Required": { "reference": "ContinueKeyword" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "BreakStatement",
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "break_keyword": { "Required": { "reference": "BreakKeyword" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ReturnStatement",
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "return_keyword": { "Required": { "reference": "ReturnKeyword" } },
+ "expression": { "Optional": { "reference": "Expression" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "EmitStatement",
+ "enabled": { "From": { "from": "0.4.21" } },
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "emit_keyword": { "Required": { "reference": "EmitKeyword" } },
+ "event": { "Required": { "reference": "IdentifierPath" } },
+ "arguments": { "Required": { "reference": "ArgumentsDeclaration" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Error Handling",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "TryStatement",
+ "enabled": { "From": { "from": "0.6.0" } },
+ "fields": {
+ "try_keyword": { "Required": { "reference": "TryKeyword" } },
+ "expression": { "Required": { "reference": "Expression" } },
+ "returns": { "Optional": { "reference": "ReturnsDeclaration" } },
+ "body": { "Required": { "reference": "Block" } },
+ "catch_clauses": { "Required": { "reference": "CatchClauses" } }
+ }
+ }
+ }
+ },
+ {
+ "Repeated": {
+ "item": {
+ "name": "CatchClauses",
+ "reference": "CatchClause",
+ "enabled": { "From": { "from": "0.6.0" } }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "CatchClause",
+ "enabled": { "From": { "from": "0.6.0" } },
+ "fields": {
+ "catch_keyword": { "Required": { "reference": "CatchKeyword" } },
+ "error": { "Optional": { "reference": "CatchClauseError" } },
+ "body": { "Required": { "reference": "Block" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "CatchClauseError",
+ "enabled": { "From": { "from": "0.6.0" } },
+ "fields": {
+ "name": { "Optional": { "reference": "Identifier" } },
+ "parameters": { "Required": { "reference": "ParametersDeclaration" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "RevertStatement",
+ "enabled": { "From": { "from": "0.8.4" } },
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "revert_keyword": { "Required": { "reference": "RevertKeyword" } },
+ "error": { "Optional": { "reference": "IdentifierPath" } },
+ "arguments": { "Required": { "reference": "ArgumentsDeclaration" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ThrowStatement",
+ "enabled": { "Till": { "till": "0.5.0" } },
+ "error_recovery": { "terminator": "semicolon" },
+ "fields": {
+ "throw_keyword": { "Required": { "reference": "ThrowKeyword" } },
+ "semicolon": { "Required": { "reference": "Semicolon" } }
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "Expressions",
+ "topics": [
+ {
+ "title": "Base Expressions",
+ "items": [
+ {
+ "Precedence": {
+ "item": {
+ "name": "Expression",
+ "precedence_expressions": [
+ {
+ "name": "AssignmentExpression",
+ "operators": [
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "Equal" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "BarEqual" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "PlusEqual" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "MinusEqual" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "CaretEqual" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "SlashEqual" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "PercentEqual" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "AsteriskEqual" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "AmpersandEqual" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "LessThanLessThanEqual" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "GreaterThanGreaterThanEqual" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": {
+ "operator": { "Required": { "reference": "GreaterThanGreaterThanGreaterThanEqual" } }
+ }
+ }
+ ]
+ },
+ {
+ "name": "ConditionalExpression",
+ "operators": [
+ {
+ "model": "Postfix",
+ "fields": {
+ "question_mark": { "Required": { "reference": "QuestionMark" } },
+ "true_expression": { "Required": { "reference": "Expression" } },
+ "colon": { "Required": { "reference": "Colon" } },
+ "false_expression": { "Required": { "reference": "Expression" } }
+ }
+ }
+ ]
+ },
+ {
+ "name": "OrExpression",
+ "operators": [
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "BarBar" } } }
+ }
+ ]
+ },
+ {
+ "name": "AndExpression",
+ "operators": [
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "AmpersandAmpersand" } } }
+ }
+ ]
+ },
+ {
+ "name": "EqualityExpression",
+ "operators": [
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "EqualEqual" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "BangEqual" } } }
+ }
+ ]
+ },
+ {
+ "name": "ComparisonExpression",
+ "operators": [
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "LessThan" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "GreaterThan" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "LessThanEqual" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "GreaterThanEqual" } } }
+ }
+ ]
+ },
+ {
+ "name": "BitwiseOrExpression",
+ "operators": [
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "Bar" } } }
+ }
+ ]
+ },
+ {
+ "name": "BitwiseXorExpression",
+ "operators": [
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "Caret" } } }
+ }
+ ]
+ },
+ {
+ "name": "BitwiseAndExpression",
+ "operators": [
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "Ampersand" } } }
+ }
+ ]
+ },
+ {
+ "name": "ShiftExpression",
+ "operators": [
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "LessThanLessThan" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "GreaterThanGreaterThan" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "GreaterThanGreaterThanGreaterThan" } } }
+ }
+ ]
+ },
+ {
+ "name": "AdditiveExpression",
+ "operators": [
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "Plus" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "Minus" } } }
+ }
+ ]
+ },
+ {
+ "name": "MultiplicativeExpression",
+ "operators": [
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "Asterisk" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "Slash" } } }
+ },
+ {
+ "model": "BinaryLeftAssociative",
+ "fields": { "operator": { "Required": { "reference": "Percent" } } }
+ }
+ ]
+ },
+ {
+ "name": "ExponentiationExpression",
+ "operators": [
+ {
+ "model": "BinaryLeftAssociative",
+ "enabled": { "Till": { "till": "0.8.0" } },
+ "fields": { "operator": { "Required": { "reference": "AsteriskAsterisk" } } }
+ },
+ {
+ "model": "BinaryRightAssociative",
+ "enabled": { "From": { "from": "0.8.0" } },
+ "fields": { "operator": { "Required": { "reference": "AsteriskAsterisk" } } }
+ }
+ ]
+ },
+ {
+ "name": "PostfixExpression",
+ "operators": [
+ { "model": "Postfix", "fields": { "operator": { "Required": { "reference": "PlusPlus" } } } },
+ { "model": "Postfix", "fields": { "operator": { "Required": { "reference": "MinusMinus" } } } }
+ ]
+ },
+ {
+ "name": "PrefixExpression",
+ "operators": [
+ { "model": "Prefix", "fields": { "operator": { "Required": { "reference": "PlusPlus" } } } },
+ { "model": "Prefix", "fields": { "operator": { "Required": { "reference": "MinusMinus" } } } },
+ { "model": "Prefix", "fields": { "operator": { "Required": { "reference": "Tilde" } } } },
+ { "model": "Prefix", "fields": { "operator": { "Required": { "reference": "Bang" } } } },
+ { "model": "Prefix", "fields": { "operator": { "Required": { "reference": "Minus" } } } },
+ {
+ "model": "Prefix",
+ "enabled": { "Till": { "till": "0.5.0" } },
+ "fields": { "operator": { "Required": { "reference": "Plus" } } }
+ },
+ {
+ "model": "Prefix",
+ "fields": { "operator": { "Required": { "reference": "DeleteKeyword" } } }
+ }
+ ]
+ },
+ {
+ "name": "FunctionCallExpression",
+ "operators": [
+ {
+ "model": "Postfix",
+ "fields": { "arguments": { "Required": { "reference": "ArgumentsDeclaration" } } }
+ }
+ ]
+ },
+ {
+ "name": "CallOptionsExpression",
+ "operators": [
+ {
+ "model": "Postfix",
+ "enabled": { "From": { "from": "0.6.2" } },
+ "error_recovery": {
+ "delimiters": {
+ "open": "open_brace",
+ "close": "close_brace",
+ "terminals_matched_acceptance_threshold": 2
+ }
+ },
+ "fields": {
+ "open_brace": { "Required": { "reference": "OpenBrace" } },
+ "options": { "Required": { "reference": "CallOptions" } },
+ "close_brace": { "Required": { "reference": "CloseBrace" } }
+ }
+ }
+ ]
+ },
+ {
+ "name": "MemberAccessExpression",
+ "operators": [
+ {
+ "model": "Postfix",
+ "fields": {
+ "period": { "Required": { "reference": "Period" } },
+ "member": { "Required": { "reference": "Identifier" } }
+ }
+ }
+ ]
+ },
+ {
+ "name": "IndexAccessExpression",
+ "operators": [
+ {
+ "model": "Postfix",
+ "error_recovery": { "delimiters": { "open": "open_bracket", "close": "close_bracket" } },
+ "fields": {
+ "open_bracket": { "Required": { "reference": "OpenBracket" } },
+ "start": { "Optional": { "reference": "Expression" } },
+ "end": { "Optional": { "reference": "IndexAccessEnd" } },
+ "close_bracket": { "Required": { "reference": "CloseBracket" } }
+ }
+ }
+ ]
+ }
+ ],
+ "primary_expressions": [
+ { "reference": "NewExpression" },
+ { "reference": "TupleExpression" },
+ { "reference": "TypeExpression", "enabled": { "From": { "from": "0.5.3" } } },
+ { "reference": "ArrayExpression" },
+ { "reference": "HexNumberExpression" },
+ { "reference": "DecimalNumberExpression" },
+ { "reference": "StringExpression" },
+ { "reference": "ElementaryType" },
+ { "reference": "PayableKeyword", "enabled": { "From": { "from": "0.6.0" } } },
+ { "reference": "ThisKeyword" },
+ { "reference": "SuperKeyword" },
+ { "reference": "TrueKeyword" },
+ { "reference": "FalseKeyword" },
+ { "reference": "Identifier" }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "IndexAccessEnd",
+ "fields": {
+ "colon": { "Required": { "reference": "Colon" } },
+ "end": { "Optional": { "reference": "Expression" } }
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Function Calls",
+ "items": [
+ {
+ "Enum": {
+ "item": {
+ "name": "ArgumentsDeclaration",
+ "variants": [
+ { "reference": "PositionalArgumentsDeclaration" },
+ { "reference": "NamedArgumentsDeclaration" }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "PositionalArgumentsDeclaration",
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "arguments": { "Required": { "reference": "PositionalArguments" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": {
+ "name": "PositionalArguments",
+ "reference": "Expression",
+ "separator": "Comma",
+ "allow_empty": true
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "NamedArgumentsDeclaration",
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "arguments": { "Optional": { "reference": "NamedArgumentGroup" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "NamedArgumentGroup",
+ "error_recovery": { "delimiters": { "open": "open_brace", "close": "close_brace" } },
+ "fields": {
+ "open_brace": { "Required": { "reference": "OpenBrace" } },
+ "arguments": { "Required": { "reference": "NamedArguments" } },
+ "close_brace": { "Required": { "reference": "CloseBrace" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": {
+ "name": "NamedArguments",
+ "reference": "NamedArgument",
+ "separator": "Comma",
+ "allow_empty": true
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": {
+ "name": "CallOptions",
+ "reference": "NamedArgument",
+ "separator": "Comma",
+ "enabled": { "From": { "from": "0.6.2" } },
+ "allow_empty": false
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "NamedArgument",
+ "fields": {
+ "name": { "Required": { "reference": "Identifier" } },
+ "colon": { "Required": { "reference": "Colon" } },
+ "value": { "Required": { "reference": "Expression" } }
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Primary Expressions",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "TypeExpression",
+ "enabled": { "From": { "from": "0.5.3" } },
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "type_keyword": { "Required": { "reference": "TypeKeyword" } },
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "type_name": { "Required": { "reference": "TypeName" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "NewExpression",
+ "fields": {
+ "new_keyword": { "Required": { "reference": "NewKeyword" } },
+ "type_name": { "Required": { "reference": "TypeName" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "TupleExpression",
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "items": { "Required": { "reference": "TupleValues" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } }
+ }
+ }
+ }
+ },
+ { "Separated": { "item": { "name": "TupleValues", "reference": "TupleValue", "separator": "Comma" } } },
+ {
+ "Struct": {
+ "item": {
+ "name": "TupleValue",
+ "fields": { "expression": { "Optional": { "reference": "Expression" } } }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "ArrayExpression",
+ "error_recovery": { "delimiters": { "open": "open_bracket", "close": "close_bracket" } },
+ "fields": {
+ "open_bracket": { "Required": { "reference": "OpenBracket" } },
+ "items": { "Required": { "reference": "ArrayValues" } },
+ "close_bracket": { "Required": { "reference": "CloseBracket" } }
+ }
+ }
+ }
+ },
+ { "Separated": { "item": { "name": "ArrayValues", "reference": "Expression", "separator": "Comma" } } }
+ ]
+ },
+ {
+ "title": "Numbers",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "HexNumberExpression",
+ "fields": {
+ "literal": { "Required": { "reference": "HexLiteral" } },
+ "unit": { "Optional": { "reference": "NumberUnit", "enabled": { "Till": { "till": "0.5.0" } } } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "DecimalNumberExpression",
+ "fields": {
+ "literal": { "Required": { "reference": "DecimalLiteral" } },
+ "unit": { "Optional": { "reference": "NumberUnit" } }
+ }
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "HexLiteral",
+ "definitions": [
+ {
+ "scanner": {
+ "TrailingContext": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "0x" } },
+ { "OneOrMore": { "scanner": { "Fragment": { "reference": "HexCharacter" } } } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "_" } },
+ {
+ "OneOrMore": { "scanner": { "Fragment": { "reference": "HexCharacter" } } }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "not_followed_by": { "Fragment": { "reference": "IdentifierStart" } }
+ }
+ }
+ },
+ {
+ "enabled": { "Till": { "till": "0.5.0" } },
+ "scanner": {
+ "TrailingContext": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "0X" } },
+ { "OneOrMore": { "scanner": { "Fragment": { "reference": "HexCharacter" } } } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "_" } },
+ {
+ "OneOrMore": { "scanner": { "Fragment": { "reference": "HexCharacter" } } }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "not_followed_by": { "Fragment": { "reference": "IdentifierStart" } }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "DecimalLiteral",
+ "definitions": [
+ {
+ "scanner": {
+ "TrailingContext": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "." } },
+ { "Fragment": { "reference": "DecimalDigits" } },
+ { "Optional": { "scanner": { "Fragment": { "reference": "DecimalExponent" } } } }
+ ]
+ }
+ },
+ "not_followed_by": { "Fragment": { "reference": "IdentifierStart" } }
+ }
+ }
+ },
+ {
+ "scanner": {
+ "TrailingContext": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ {
+ "TrailingContext": {
+ "scanner": { "Fragment": { "reference": "DecimalDigits" } },
+ "not_followed_by": { "Atom": { "atom": "." } }
+ }
+ },
+ { "Optional": { "scanner": { "Fragment": { "reference": "DecimalExponent" } } } }
+ ]
+ }
+ },
+ "not_followed_by": { "Fragment": { "reference": "IdentifierStart" } }
+ }
+ }
+ },
+ {
+ "enabled": { "Till": { "till": "0.5.0" } },
+ "scanner": {
+ "TrailingContext": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ {
+ "TrailingContext": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Fragment": { "reference": "DecimalDigits" } },
+ { "Atom": { "atom": "." } }
+ ]
+ }
+ },
+ "not_followed_by": { "Fragment": { "reference": "DecimalDigits" } }
+ }
+ },
+ { "Optional": { "scanner": { "Fragment": { "reference": "DecimalExponent" } } } }
+ ]
+ }
+ },
+ "not_followed_by": { "Fragment": { "reference": "IdentifierStart" } }
+ }
+ }
+ },
+ {
+ "enabled": { "Till": { "till": "0.5.0" } },
+ "scanner": {
+ "TrailingContext": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Fragment": { "reference": "DecimalDigits" } },
+ { "Atom": { "atom": "." } },
+ { "Fragment": { "reference": "DecimalDigits" } },
+ { "Optional": { "scanner": { "Fragment": { "reference": "DecimalExponent" } } } }
+ ]
+ }
+ },
+ "not_followed_by": { "Fragment": { "reference": "IdentifierStart" } }
+ }
+ }
+ },
+ {
+ "enabled": { "From": { "from": "0.5.0" } },
+ "scanner": {
+ "TrailingContext": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Fragment": { "reference": "DecimalDigits" } },
+ {
+ "Optional": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "." } },
+ { "Fragment": { "reference": "DecimalDigits" } }
+ ]
+ }
+ }
+ }
+ },
+ { "Optional": { "scanner": { "Fragment": { "reference": "DecimalExponent" } } } }
+ ]
+ }
+ },
+ "not_followed_by": { "Fragment": { "reference": "IdentifierStart" } }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Fragment": {
+ "item": {
+ "name": "DecimalDigits",
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "OneOrMore": { "scanner": { "Range": { "inclusive_start": "0", "inclusive_end": "9" } } } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "_" } },
+ {
+ "OneOrMore": {
+ "scanner": { "Range": { "inclusive_start": "0", "inclusive_end": "9" } }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "Fragment": {
+ "item": {
+ "name": "DecimalExponent",
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Choice": { "scanners": [{ "Atom": { "atom": "e" } }, { "Atom": { "atom": "E" } }] } },
+ { "Optional": { "scanner": { "Atom": { "atom": "-" } } } },
+ { "Fragment": { "reference": "DecimalDigits" } }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "NumberUnit",
+ "variants": [
+ { "reference": "WeiKeyword" },
+ { "reference": "GweiKeyword", "enabled": { "From": { "from": "0.6.11" } } },
+ { "reference": "SzaboKeyword", "enabled": { "Till": { "till": "0.7.0" } } },
+ { "reference": "FinneyKeyword", "enabled": { "Till": { "till": "0.7.0" } } },
+ { "reference": "EtherKeyword" },
+ { "reference": "SecondsKeyword" },
+ { "reference": "MinutesKeyword" },
+ { "reference": "HoursKeyword" },
+ { "reference": "DaysKeyword" },
+ { "reference": "WeeksKeyword" },
+ { "reference": "YearsKeyword", "enabled": { "Till": { "till": "0.5.0" } } }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Strings",
+ "items": [
+ {
+ "Enum": {
+ "item": {
+ "name": "StringExpression",
+ "variants": [
+ { "reference": "StringLiteral", "enabled": { "Till": { "till": "0.5.14" } } },
+ { "reference": "StringLiterals", "enabled": { "From": { "from": "0.5.14" } } },
+ { "reference": "HexStringLiteral", "enabled": { "Till": { "till": "0.5.14" } } },
+ { "reference": "HexStringLiterals", "enabled": { "From": { "from": "0.5.14" } } },
+ { "reference": "UnicodeStringLiterals", "enabled": { "From": { "from": "0.7.0" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Repeated": {
+ "item": {
+ "name": "StringLiterals",
+ "reference": "StringLiteral",
+ "enabled": { "From": { "from": "0.5.14" } }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "StringLiteral",
+ "variants": [
+ { "reference": "SingleQuotedStringLiteral" },
+ { "reference": "DoubleQuotedStringLiteral" }
+ ]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "SingleQuotedStringLiteral",
+ "definitions": [
+ {
+ "enabled": { "Till": { "till": "0.4.25" } },
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "'" } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Fragment": { "reference": "EscapeSequenceArbitrary" } },
+ { "Not": { "chars": ["'", "\\", "\r", "\n"] } }
+ ]
+ }
+ }
+ }
+ },
+ { "Atom": { "atom": "'" } }
+ ]
+ }
+ }
+ },
+ {
+ "enabled": { "Range": { "from": "0.4.25", "till": "0.7.0" } },
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "'" } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Fragment": { "reference": "EscapeSequence" } },
+ { "Not": { "chars": ["'", "\\", "\r", "\n"] } }
+ ]
+ }
+ }
+ }
+ },
+ { "Atom": { "atom": "'" } }
+ ]
+ }
+ }
+ },
+ {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "'" } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Fragment": { "reference": "EscapeSequence" } },
+ { "Range": { "inclusive_start": " ", "inclusive_end": "&" } },
+ { "Range": { "inclusive_start": "(", "inclusive_end": "[" } },
+ { "Range": { "inclusive_start": "]", "inclusive_end": "~" } }
+ ]
+ }
+ }
+ }
+ },
+ { "Atom": { "atom": "'" } }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "DoubleQuotedStringLiteral",
+ "definitions": [
+ {
+ "enabled": { "Till": { "till": "0.4.25" } },
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "\"" } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Fragment": { "reference": "EscapeSequenceArbitrary" } },
+ { "Not": { "chars": ["\"", "\\", "\r", "\n"] } }
+ ]
+ }
+ }
+ }
+ },
+ { "Atom": { "atom": "\"" } }
+ ]
+ }
+ }
+ },
+ {
+ "enabled": { "Range": { "from": "0.4.25", "till": "0.7.0" } },
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "\"" } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Fragment": { "reference": "EscapeSequence" } },
+ { "Not": { "chars": ["\"", "\\", "\r", "\n"] } }
+ ]
+ }
+ }
+ }
+ },
+ { "Atom": { "atom": "\"" } }
+ ]
+ }
+ }
+ },
+ {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "\"" } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Fragment": { "reference": "EscapeSequence" } },
+ { "Range": { "inclusive_start": " ", "inclusive_end": "!" } },
+ { "Range": { "inclusive_start": "#", "inclusive_end": "[" } },
+ { "Range": { "inclusive_start": "]", "inclusive_end": "~" } }
+ ]
+ }
+ }
+ }
+ },
+ { "Atom": { "atom": "\"" } }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Repeated": {
+ "item": {
+ "name": "HexStringLiterals",
+ "reference": "HexStringLiteral",
+ "enabled": { "From": { "from": "0.5.14" } }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "HexStringLiteral",
+ "variants": [
+ { "reference": "SingleQuotedHexStringLiteral" },
+ { "reference": "DoubleQuotedHexStringLiteral" }
+ ]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "SingleQuotedHexStringLiteral",
+ "definitions": [
+ {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "hex'" } },
+ { "Optional": { "scanner": { "Fragment": { "reference": "HexStringContents" } } } },
+ { "Atom": { "atom": "'" } }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "DoubleQuotedHexStringLiteral",
+ "definitions": [
+ {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "hex\"" } },
+ { "Optional": { "scanner": { "Fragment": { "reference": "HexStringContents" } } } },
+ { "Atom": { "atom": "\"" } }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Fragment": {
+ "item": {
+ "name": "HexStringContents",
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Fragment": { "reference": "HexCharacter" } },
+ { "Fragment": { "reference": "HexCharacter" } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Optional": { "scanner": { "Atom": { "atom": "_" } } } },
+ { "Fragment": { "reference": "HexCharacter" } },
+ { "Fragment": { "reference": "HexCharacter" } }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "Fragment": {
+ "item": {
+ "name": "HexCharacter",
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Range": { "inclusive_start": "0", "inclusive_end": "9" } },
+ { "Range": { "inclusive_start": "a", "inclusive_end": "f" } },
+ { "Range": { "inclusive_start": "A", "inclusive_end": "F" } }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "Repeated": {
+ "item": {
+ "name": "UnicodeStringLiterals",
+ "reference": "UnicodeStringLiteral",
+ "enabled": { "From": { "from": "0.7.0" } }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "UnicodeStringLiteral",
+ "enabled": { "From": { "from": "0.7.0" } },
+ "variants": [
+ { "reference": "SingleQuotedUnicodeStringLiteral" },
+ { "reference": "DoubleQuotedUnicodeStringLiteral" }
+ ]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "SingleQuotedUnicodeStringLiteral",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.7.0" } },
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "unicode'" } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Fragment": { "reference": "EscapeSequence" } },
+ { "Not": { "chars": ["'", "\\", "\r", "\n"] } }
+ ]
+ }
+ }
+ }
+ },
+ { "Atom": { "atom": "'" } }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "DoubleQuotedUnicodeStringLiteral",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.7.0" } },
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "unicode\"" } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Fragment": { "reference": "EscapeSequence" } },
+ { "Not": { "chars": ["\"", "\\", "\r", "\n"] } }
+ ]
+ }
+ }
+ }
+ },
+ { "Atom": { "atom": "\"" } }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Fragment": {
+ "item": {
+ "name": "EscapeSequence",
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "\\" } },
+ {
+ "Choice": {
+ "scanners": [
+ { "Fragment": { "reference": "AsciiEscape" } },
+ { "Fragment": { "reference": "HexByteEscape" } },
+ { "Fragment": { "reference": "UnicodeEscape" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "Fragment": {
+ "item": {
+ "name": "EscapeSequenceArbitrary",
+ "enabled": { "Till": { "till": "0.4.25" } },
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "\\" } },
+ {
+ "Choice": {
+ "scanners": [
+ { "Not": { "chars": ["x", "u"] } },
+ { "Fragment": { "reference": "HexByteEscape" } },
+ { "Fragment": { "reference": "UnicodeEscape" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "Fragment": {
+ "item": {
+ "name": "AsciiEscape",
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Atom": { "atom": "n" } },
+ { "Atom": { "atom": "r" } },
+ { "Atom": { "atom": "t" } },
+ { "Atom": { "atom": "'" } },
+ { "Atom": { "atom": "\"" } },
+ { "Atom": { "atom": "\\" } },
+ { "Atom": { "atom": "\r\n" } },
+ { "Atom": { "atom": "\r" } },
+ { "Atom": { "atom": "\n" } }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "Fragment": {
+ "item": {
+ "name": "HexByteEscape",
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "x" } },
+ { "Fragment": { "reference": "HexCharacter" } },
+ { "Fragment": { "reference": "HexCharacter" } }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "Fragment": {
+ "item": {
+ "name": "UnicodeEscape",
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "u" } },
+ { "Fragment": { "reference": "HexCharacter" } },
+ { "Fragment": { "reference": "HexCharacter" } },
+ { "Fragment": { "reference": "HexCharacter" } },
+ { "Fragment": { "reference": "HexCharacter" } }
+ ]
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Identifiers",
+ "items": [
+ { "Separated": { "item": { "name": "IdentifierPath", "reference": "Identifier", "separator": "Period" } } },
+ {
+ "Token": {
+ "item": {
+ "name": "Identifier",
+ "definitions": [
+ {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Fragment": { "reference": "IdentifierStart" } },
+ { "ZeroOrMore": { "scanner": { "Fragment": { "reference": "IdentifierPart" } } } }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Fragment": {
+ "item": {
+ "name": "IdentifierStart",
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Atom": { "atom": "_" } },
+ { "Atom": { "atom": "$" } },
+ { "Range": { "inclusive_start": "a", "inclusive_end": "z" } },
+ { "Range": { "inclusive_start": "A", "inclusive_end": "Z" } }
+ ]
+ }
+ }
+ }
+ }
+ },
+ {
+ "Fragment": {
+ "item": {
+ "name": "IdentifierPart",
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Fragment": { "reference": "IdentifierStart" } },
+ { "Range": { "inclusive_start": "0", "inclusive_end": "9" } }
+ ]
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "Yul",
+ "topics": [
+ {
+ "title": "Yul Statements",
+ "lexical_context": "Yul",
+ "items": [
+ {
+ "Struct": {
+ "item": {
+ "name": "YulBlock",
+ "error_recovery": { "delimiters": { "open": "open_brace", "close": "close_brace" } },
+ "fields": {
+ "open_brace": { "Required": { "reference": "OpenBrace" } },
+ "statements": { "Required": { "reference": "YulStatements" } },
+ "close_brace": { "Required": { "reference": "CloseBrace" } }
+ }
+ }
+ }
+ },
+ { "Repeated": { "item": { "name": "YulStatements", "reference": "YulStatement", "allow_empty": true } } },
+ {
+ "Enum": {
+ "item": {
+ "name": "YulStatement",
+ "variants": [
+ { "reference": "YulBlock" },
+ { "reference": "YulFunctionDefinition" },
+ { "reference": "YulStackAssignmentStatement", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "reference": "YulIfStatement" },
+ { "reference": "YulForStatement" },
+ { "reference": "YulSwitchStatement" },
+ { "reference": "YulLeaveStatement", "enabled": { "From": { "from": "0.6.0" } } },
+ { "reference": "YulBreakStatement" },
+ { "reference": "YulContinueStatement" },
+ { "reference": "YulVariableAssignmentStatement" },
+ { "reference": "YulLabel", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "reference": "YulVariableDeclarationStatement" },
+ { "reference": "YulExpression" }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulFunctionDefinition",
+ "fields": {
+ "function_keyword": { "Required": { "reference": "YulFunctionKeyword" } },
+ "name": { "Required": { "reference": "YulIdentifier" } },
+ "parameters": { "Required": { "reference": "YulParametersDeclaration" } },
+ "returns": { "Optional": { "reference": "YulReturnsDeclaration" } },
+ "body": { "Required": { "reference": "YulBlock" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulParametersDeclaration",
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "parameters": { "Required": { "reference": "YulParameters" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": {
+ "name": "YulParameters",
+ "reference": "YulIdentifier",
+ "separator": "Comma",
+ "allow_empty": true
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulReturnsDeclaration",
+ "fields": {
+ "minus_greater_than": { "Required": { "reference": "MinusGreaterThan" } },
+ "variables": { "Required": { "reference": "YulVariableNames" } }
+ }
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": { "name": "YulVariableNames", "reference": "YulIdentifier", "separator": "Comma" }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulVariableDeclarationStatement",
+ "fields": {
+ "let_keyword": { "Required": { "reference": "YulLetKeyword" } },
+ "variables": { "Required": { "reference": "YulVariableNames" } },
+ "value": { "Optional": { "reference": "YulVariableDeclarationValue" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulVariableDeclarationValue",
+ "fields": {
+ "assignment": { "Required": { "reference": "YulAssignmentOperator" } },
+ "expression": { "Required": { "reference": "YulExpression" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulVariableAssignmentStatement",
+ "fields": {
+ "variables": { "Required": { "reference": "YulPaths" } },
+ "assignment": { "Required": { "reference": "YulAssignmentOperator" } },
+ "expression": { "Required": { "reference": "YulExpression" } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "YulAssignmentOperator",
+ "variants": [
+ { "reference": "ColonEqual" },
+ { "reference": "YulColonAndEqual", "enabled": { "Till": { "till": "0.5.5" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulColonAndEqual",
+ "enabled": { "Till": { "till": "0.5.5" } },
+ "fields": {
+ "colon": { "Required": { "reference": "Colon" } },
+ "equal": { "Required": { "reference": "Equal" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulStackAssignmentStatement",
+ "enabled": { "Till": { "till": "0.5.0" } },
+ "fields": {
+ "assignment": { "Required": { "reference": "YulStackAssignmentOperator" } },
+ "variable": { "Required": { "reference": "YulIdentifier" } }
+ }
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "YulStackAssignmentOperator",
+ "enabled": { "Till": { "till": "0.5.0" } },
+ "variants": [{ "reference": "EqualColon" }, { "reference": "YulEqualAndColon" }]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulEqualAndColon",
+ "enabled": { "Till": { "till": "0.5.0" } },
+ "fields": {
+ "equal": { "Required": { "reference": "Equal" } },
+ "colon": { "Required": { "reference": "Colon" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulIfStatement",
+ "fields": {
+ "if_keyword": { "Required": { "reference": "YulIfKeyword" } },
+ "condition": { "Required": { "reference": "YulExpression" } },
+ "body": { "Required": { "reference": "YulBlock" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulForStatement",
+ "fields": {
+ "for_keyword": { "Required": { "reference": "YulForKeyword" } },
+ "initialization": { "Required": { "reference": "YulBlock" } },
+ "condition": { "Required": { "reference": "YulExpression" } },
+ "iterator": { "Required": { "reference": "YulBlock" } },
+ "body": { "Required": { "reference": "YulBlock" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulSwitchStatement",
+ "fields": {
+ "switch_keyword": { "Required": { "reference": "YulSwitchKeyword" } },
+ "expression": { "Required": { "reference": "YulExpression" } },
+ "cases": { "Required": { "reference": "YulSwitchCases" } }
+ }
+ }
+ }
+ },
+ { "Repeated": { "item": { "name": "YulSwitchCases", "reference": "YulSwitchCase" } } },
+ {
+ "Enum": {
+ "item": {
+ "name": "YulSwitchCase",
+ "variants": [{ "reference": "YulDefaultCase" }, { "reference": "YulValueCase" }]
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulDefaultCase",
+ "fields": {
+ "default_keyword": { "Required": { "reference": "YulDefaultKeyword" } },
+ "body": { "Required": { "reference": "YulBlock" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulValueCase",
+ "fields": {
+ "case_keyword": { "Required": { "reference": "YulCaseKeyword" } },
+ "value": { "Required": { "reference": "YulLiteral" } },
+ "body": { "Required": { "reference": "YulBlock" } }
+ }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulLeaveStatement",
+ "enabled": { "From": { "from": "0.6.0" } },
+ "fields": { "leave_keyword": { "Required": { "reference": "YulLeaveKeyword" } } }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulBreakStatement",
+ "fields": { "break_keyword": { "Required": { "reference": "YulBreakKeyword" } } }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulContinueStatement",
+ "fields": { "continue_keyword": { "Required": { "reference": "YulContinueKeyword" } } }
+ }
+ }
+ },
+ {
+ "Struct": {
+ "item": {
+ "name": "YulLabel",
+ "enabled": { "Till": { "till": "0.5.0" } },
+ "fields": {
+ "label": { "Required": { "reference": "YulIdentifier" } },
+ "colon": { "Required": { "reference": "Colon" } }
+ }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Yul Expressions",
+ "lexical_context": "Yul",
+ "items": [
+ {
+ "Precedence": {
+ "item": {
+ "name": "YulExpression",
+ "precedence_expressions": [
+ {
+ "name": "YulFunctionCallExpression",
+ "operators": [
+ {
+ "model": "Postfix",
+ "error_recovery": { "delimiters": { "open": "open_paren", "close": "close_paren" } },
+ "fields": {
+ "open_paren": { "Required": { "reference": "OpenParen" } },
+ "arguments": { "Required": { "reference": "YulArguments" } },
+ "close_paren": { "Required": { "reference": "CloseParen" } }
+ }
+ }
+ ]
+ }
+ ],
+ "primary_expressions": [
+ { "reference": "YulLiteral" },
+ { "reference": "YulBuiltInFunction" },
+ { "reference": "YulPath" }
+ ]
+ }
+ }
+ },
+ {
+ "Separated": {
+ "item": {
+ "name": "YulArguments",
+ "reference": "YulExpression",
+ "separator": "Comma",
+ "allow_empty": true
+ }
+ }
+ },
+ { "Separated": { "item": { "name": "YulPaths", "reference": "YulPath", "separator": "Comma" } } },
+ { "Separated": { "item": { "name": "YulPath", "reference": "YulIdentifier", "separator": "Period" } } },
+ {
+ "Token": {
+ "item": {
+ "name": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "Range": { "from": "0.5.8", "till": "0.7.0" } },
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Fragment": { "reference": "IdentifierStart" } },
+ {
+ "ZeroOrMore": {
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Fragment": { "reference": "IdentifierPart" } },
+ { "Atom": { "atom": "." } }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Fragment": { "reference": "IdentifierStart" } },
+ { "ZeroOrMore": { "scanner": { "Fragment": { "reference": "IdentifierPart" } } } }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "YulBuiltInFunction",
+ "variants": [
+ { "reference": "YulAddKeyword" },
+ { "reference": "YulAddModKeyword" },
+ { "reference": "YulAddressKeyword" },
+ { "reference": "YulAndKeyword" },
+ { "reference": "YulBalanceKeyword" },
+ { "reference": "YulBlockHashKeyword" },
+ { "reference": "YulByteKeyword" },
+ { "reference": "YulCallCodeKeyword" },
+ { "reference": "YulCallDataCopyKeyword" },
+ { "reference": "YulCallDataLoadKeyword" },
+ { "reference": "YulCallDataSizeKeyword" },
+ { "reference": "YulCallerKeyword" },
+ { "reference": "YulCallKeyword" },
+ { "reference": "YulCallValueKeyword" },
+ { "reference": "YulCoinBaseKeyword" },
+ { "reference": "YulCreateKeyword" },
+ { "reference": "YulDelegateCallKeyword" },
+ { "reference": "YulDivKeyword" },
+ { "reference": "YulEqKeyword" },
+ { "reference": "YulExpKeyword" },
+ { "reference": "YulExtCodeCopyKeyword" },
+ { "reference": "YulExtCodeSizeKeyword" },
+ { "reference": "YulGasKeyword" },
+ { "reference": "YulGasLimitKeyword" },
+ { "reference": "YulGasPriceKeyword" },
+ { "reference": "YulGtKeyword" },
+ { "reference": "YulInvalidKeyword" },
+ { "reference": "YulIsZeroKeyword" },
+ { "reference": "YulJumpKeyword", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "reference": "YulJumpiKeyword", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "reference": "YulLog0Keyword" },
+ { "reference": "YulLog1Keyword" },
+ { "reference": "YulLog2Keyword" },
+ { "reference": "YulLog3Keyword" },
+ { "reference": "YulLog4Keyword" },
+ { "reference": "YulLtKeyword" },
+ { "reference": "YulMLoadKeyword" },
+ { "reference": "YulModKeyword" },
+ { "reference": "YulMSizeKeyword" },
+ { "reference": "YulMStore8Keyword" },
+ { "reference": "YulMStoreKeyword" },
+ { "reference": "YulMulKeyword" },
+ { "reference": "YulMulModKeyword" },
+ { "reference": "YulNotKeyword" },
+ { "reference": "YulNumberKeyword" },
+ { "reference": "YulOriginKeyword" },
+ { "reference": "YulOrKeyword" },
+ { "reference": "YulPopKeyword" },
+ { "reference": "YulReturnKeyword" },
+ { "reference": "YulRevertKeyword" },
+ { "reference": "YulSDivKeyword" },
+ { "reference": "YulSelfDestructKeyword" },
+ { "reference": "YulSgtKeyword" },
+ { "reference": "YulSignExtendKeyword" },
+ { "reference": "YulSLoadKeyword" },
+ { "reference": "YulSltKeyword" },
+ { "reference": "YulSModKeyword" },
+ { "reference": "YulSStoreKeyword" },
+ { "reference": "YulStopKeyword" },
+ { "reference": "YulSubKeyword" },
+ { "reference": "YulTimestampKeyword" },
+ { "reference": "YulXorKeyword" },
+ { "reference": "YulKeccak256Keyword", "enabled": { "From": { "from": "0.4.12" } } },
+ { "reference": "YulSha3Keyword", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "reference": "YulSuicideKeyword", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "reference": "YulReturnDataCopyKeyword", "enabled": { "From": { "from": "0.4.12" } } },
+ { "reference": "YulReturnDataSizeKeyword", "enabled": { "From": { "from": "0.4.12" } } },
+ { "reference": "YulStaticCallKeyword", "enabled": { "From": { "from": "0.4.12" } } },
+ { "reference": "YulCreate2Keyword", "enabled": { "From": { "from": "0.4.12" } } },
+ { "reference": "YulExtCodeHashKeyword", "enabled": { "From": { "from": "0.5.0" } } },
+ { "reference": "YulSarKeyword" },
+ { "reference": "YulShlKeyword" },
+ { "reference": "YulShrKeyword" },
+ { "reference": "YulChainIdKeyword" },
+ { "reference": "YulSelfBalanceKeyword" },
+ { "reference": "YulBaseFeeKeyword", "enabled": { "From": { "from": "0.8.7" } } },
+ { "reference": "YulDifficultyKeyword", "enabled": { "Till": { "till": "0.8.18" } } },
+ { "reference": "YulPrevRandaoKeyword", "enabled": { "From": { "from": "0.8.18" } } },
+ { "reference": "YulBlobBaseFeeKeyword", "enabled": { "From": { "from": "0.8.24" } } },
+ { "reference": "YulBlobHashKeyword", "enabled": { "From": { "from": "0.8.24" } } },
+ { "reference": "YulTLoadKeyword", "enabled": { "From": { "from": "0.8.24" } } },
+ { "reference": "YulTStoreKeyword", "enabled": { "From": { "from": "0.8.24" } } },
+ { "reference": "YulMCopyKeyword", "enabled": { "From": { "from": "0.8.24" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Enum": {
+ "item": {
+ "name": "YulLiteral",
+ "variants": [
+ { "reference": "YulTrueKeyword" },
+ { "reference": "YulFalseKeyword" },
+ { "reference": "YulDecimalLiteral" },
+ { "reference": "YulHexLiteral" },
+ { "reference": "HexStringLiteral" },
+ { "reference": "StringLiteral" }
+ ]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "YulDecimalLiteral",
+ "definitions": [
+ {
+ "scanner": {
+ "TrailingContext": {
+ "scanner": {
+ "Choice": {
+ "scanners": [
+ { "Atom": { "atom": "0" } },
+ {
+ "Sequence": {
+ "scanners": [
+ { "Range": { "inclusive_start": "1", "inclusive_end": "9" } },
+ {
+ "ZeroOrMore": {
+ "scanner": { "Range": { "inclusive_start": "0", "inclusive_end": "9" } }
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "not_followed_by": { "Fragment": { "reference": "IdentifierStart" } }
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Token": {
+ "item": {
+ "name": "YulHexLiteral",
+ "definitions": [
+ {
+ "scanner": {
+ "TrailingContext": {
+ "scanner": {
+ "Sequence": {
+ "scanners": [
+ { "Atom": { "atom": "0x" } },
+ { "OneOrMore": { "scanner": { "Fragment": { "reference": "HexCharacter" } } } }
+ ]
+ }
+ },
+ "not_followed_by": { "Fragment": { "reference": "IdentifierStart" } }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ "title": "Yul Keywords",
+ "lexical_context": "Yul",
+ "items": [
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulAbstractKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "abstract" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulAddKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "add" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulAddModKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "addmod" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulAddressKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "reserved": "Never", "value": { "Atom": { "atom": "address" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulAfterKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "after" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulAliasKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "alias" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulAndKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "and" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulAnonymousKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "anonymous" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulApplyKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "apply" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulAsKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "as" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulAssemblyKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "assembly" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulAutoKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "auto" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulBalanceKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "balance" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulBaseFeeKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.8.7" } },
+ "reserved": { "From": { "from": "0.8.7" } },
+ "value": { "Atom": { "atom": "basefee" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulBlobBaseFeeKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.8.24" } },
+ "reserved": { "From": { "from": "0.8.25" } },
+ "value": { "Atom": { "atom": "blobbasefee" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulBlobHashKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.8.24" } },
+ "reserved": { "From": { "from": "0.8.25" } },
+ "value": { "Atom": { "atom": "blobhash" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulBlockHashKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "blockhash" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulBoolKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.5.10" } },
+ "value": { "Atom": { "atom": "bool" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulBreakKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "break" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulByteKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "byte" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulBytesKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "bytes" } },
+ {
+ "Optional": {
+ "value": {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "1" } },
+ { "Atom": { "atom": "2" } },
+ { "Atom": { "atom": "3" } },
+ { "Atom": { "atom": "4" } },
+ { "Atom": { "atom": "5" } },
+ { "Atom": { "atom": "6" } },
+ { "Atom": { "atom": "7" } },
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "9" } },
+ { "Atom": { "atom": "10" } },
+ { "Atom": { "atom": "11" } },
+ { "Atom": { "atom": "12" } },
+ { "Atom": { "atom": "13" } },
+ { "Atom": { "atom": "14" } },
+ { "Atom": { "atom": "15" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "17" } },
+ { "Atom": { "atom": "18" } },
+ { "Atom": { "atom": "19" } },
+ { "Atom": { "atom": "20" } },
+ { "Atom": { "atom": "21" } },
+ { "Atom": { "atom": "22" } },
+ { "Atom": { "atom": "23" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "25" } },
+ { "Atom": { "atom": "26" } },
+ { "Atom": { "atom": "27" } },
+ { "Atom": { "atom": "28" } },
+ { "Atom": { "atom": "29" } },
+ { "Atom": { "atom": "30" } },
+ { "Atom": { "atom": "31" } },
+ { "Atom": { "atom": "32" } }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCallCodeKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "callcode" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCallDataCopyKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "calldatacopy" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCallDataKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "calldata" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCallDataLoadKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "calldataload" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCallDataSizeKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "calldatasize" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCallerKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "caller" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCallKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "call" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCallValueKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "callvalue" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCaseKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "case" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCatchKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "catch" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulChainIdKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ { "reserved": { "From": { "from": "0.5.12" } }, "value": { "Atom": { "atom": "chainid" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCoinBaseKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "coinbase" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulConstantKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "constant" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulConstructorKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "constructor" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulContinueKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "continue" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulContractKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "contract" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCopyOfKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "copyof" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCreateKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "create" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulCreate2Keyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.4.12" } },
+ "reserved": { "From": { "from": "0.4.12" } },
+ "value": { "Atom": { "atom": "create2" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulDaysKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "days" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulDefaultKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "default" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulDefineKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "define" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulDelegateCallKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "delegatecall" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulDeleteKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "delete" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulDifficultyKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ { "enabled": { "Till": { "till": "0.8.18" } }, "value": { "Atom": { "atom": "difficulty" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulDivKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "div" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulDoKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "do" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulElseKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "else" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulEmitKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "emit" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulEnumKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "enum" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulEqKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "eq" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulEtherKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "ether" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulEventKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "event" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulExpKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "exp" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulExtCodeCopyKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "extcodecopy" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulExtCodeHashKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.5.0" } },
+ "reserved": { "From": { "from": "0.5.0" } },
+ "value": { "Atom": { "atom": "extcodehash" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulExtCodeSizeKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "extcodesize" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulExternalKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "external" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulFallbackKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.6.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "fallback" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulFalseKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "false" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulFinalKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "final" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulFinneyKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.0" } },
+ "value": { "Atom": { "atom": "finney" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulFixedKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "fixed" } }
+ },
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "fixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } },
+ { "Atom": { "atom": "88" } },
+ { "Atom": { "atom": "96" } },
+ { "Atom": { "atom": "104" } },
+ { "Atom": { "atom": "112" } },
+ { "Atom": { "atom": "120" } },
+ { "Atom": { "atom": "128" } },
+ { "Atom": { "atom": "136" } },
+ { "Atom": { "atom": "144" } },
+ { "Atom": { "atom": "152" } },
+ { "Atom": { "atom": "160" } },
+ { "Atom": { "atom": "168" } },
+ { "Atom": { "atom": "176" } }
+ ]
+ }
+ },
+ { "Atom": { "atom": "x" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "fixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "184x8" } },
+ { "Atom": { "atom": "184x16" } },
+ { "Atom": { "atom": "184x24" } },
+ { "Atom": { "atom": "184x32" } },
+ { "Atom": { "atom": "184x40" } },
+ { "Atom": { "atom": "184x48" } },
+ { "Atom": { "atom": "184x56" } },
+ { "Atom": { "atom": "184x64" } },
+ { "Atom": { "atom": "184x72" } },
+ { "Atom": { "atom": "192x8" } },
+ { "Atom": { "atom": "192x16" } },
+ { "Atom": { "atom": "192x24" } },
+ { "Atom": { "atom": "192x32" } },
+ { "Atom": { "atom": "192x40" } },
+ { "Atom": { "atom": "192x48" } },
+ { "Atom": { "atom": "192x56" } },
+ { "Atom": { "atom": "192x64" } },
+ { "Atom": { "atom": "200x8" } },
+ { "Atom": { "atom": "200x16" } },
+ { "Atom": { "atom": "200x24" } },
+ { "Atom": { "atom": "200x32" } },
+ { "Atom": { "atom": "200x40" } },
+ { "Atom": { "atom": "200x48" } },
+ { "Atom": { "atom": "200x56" } },
+ { "Atom": { "atom": "208x8" } },
+ { "Atom": { "atom": "208x16" } },
+ { "Atom": { "atom": "208x24" } },
+ { "Atom": { "atom": "208x32" } },
+ { "Atom": { "atom": "208x40" } },
+ { "Atom": { "atom": "208x48" } },
+ { "Atom": { "atom": "216x8" } },
+ { "Atom": { "atom": "216x16" } },
+ { "Atom": { "atom": "216x24" } },
+ { "Atom": { "atom": "216x32" } },
+ { "Atom": { "atom": "216x40" } },
+ { "Atom": { "atom": "224x8" } },
+ { "Atom": { "atom": "224x16" } },
+ { "Atom": { "atom": "224x24" } },
+ { "Atom": { "atom": "224x32" } },
+ { "Atom": { "atom": "232x8" } },
+ { "Atom": { "atom": "232x16" } },
+ { "Atom": { "atom": "232x24" } },
+ { "Atom": { "atom": "240x8" } },
+ { "Atom": { "atom": "240x16" } },
+ { "Atom": { "atom": "248x8" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.4.14", "till": "0.7.1" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "fixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "184x80" } },
+ { "Atom": { "atom": "192x72" } },
+ { "Atom": { "atom": "192x80" } },
+ { "Atom": { "atom": "200x64" } },
+ { "Atom": { "atom": "200x72" } },
+ { "Atom": { "atom": "200x80" } },
+ { "Atom": { "atom": "208x56" } },
+ { "Atom": { "atom": "208x64" } },
+ { "Atom": { "atom": "208x72" } },
+ { "Atom": { "atom": "208x80" } },
+ { "Atom": { "atom": "216x48" } },
+ { "Atom": { "atom": "216x56" } },
+ { "Atom": { "atom": "216x64" } },
+ { "Atom": { "atom": "216x72" } },
+ { "Atom": { "atom": "216x80" } },
+ { "Atom": { "atom": "224x40" } },
+ { "Atom": { "atom": "224x48" } },
+ { "Atom": { "atom": "224x56" } },
+ { "Atom": { "atom": "224x64" } },
+ { "Atom": { "atom": "224x72" } },
+ { "Atom": { "atom": "224x80" } },
+ { "Atom": { "atom": "232x32" } },
+ { "Atom": { "atom": "232x40" } },
+ { "Atom": { "atom": "232x48" } },
+ { "Atom": { "atom": "232x56" } },
+ { "Atom": { "atom": "232x64" } },
+ { "Atom": { "atom": "232x72" } },
+ { "Atom": { "atom": "232x80" } },
+ { "Atom": { "atom": "240x24" } },
+ { "Atom": { "atom": "240x32" } },
+ { "Atom": { "atom": "240x40" } },
+ { "Atom": { "atom": "240x48" } },
+ { "Atom": { "atom": "240x56" } },
+ { "Atom": { "atom": "240x64" } },
+ { "Atom": { "atom": "240x72" } },
+ { "Atom": { "atom": "240x80" } },
+ { "Atom": { "atom": "248x16" } },
+ { "Atom": { "atom": "248x24" } },
+ { "Atom": { "atom": "248x32" } },
+ { "Atom": { "atom": "248x40" } },
+ { "Atom": { "atom": "248x48" } },
+ { "Atom": { "atom": "248x56" } },
+ { "Atom": { "atom": "248x64" } },
+ { "Atom": { "atom": "248x72" } },
+ { "Atom": { "atom": "248x80" } },
+ { "Atom": { "atom": "256x8" } },
+ { "Atom": { "atom": "256x16" } },
+ { "Atom": { "atom": "256x24" } },
+ { "Atom": { "atom": "256x32" } },
+ { "Atom": { "atom": "256x40" } },
+ { "Atom": { "atom": "256x48" } },
+ { "Atom": { "atom": "256x56" } },
+ { "Atom": { "atom": "256x64" } },
+ { "Atom": { "atom": "256x72" } },
+ { "Atom": { "atom": "256x80" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.4.14", "till": "0.7.1" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "fixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } },
+ { "Atom": { "atom": "88" } },
+ { "Atom": { "atom": "96" } },
+ { "Atom": { "atom": "104" } },
+ { "Atom": { "atom": "112" } },
+ { "Atom": { "atom": "120" } },
+ { "Atom": { "atom": "128" } },
+ { "Atom": { "atom": "136" } },
+ { "Atom": { "atom": "144" } },
+ { "Atom": { "atom": "152" } },
+ { "Atom": { "atom": "160" } },
+ { "Atom": { "atom": "168" } },
+ { "Atom": { "atom": "176" } },
+ { "Atom": { "atom": "184" } },
+ { "Atom": { "atom": "192" } },
+ { "Atom": { "atom": "200" } },
+ { "Atom": { "atom": "208" } },
+ { "Atom": { "atom": "216" } },
+ { "Atom": { "atom": "224" } },
+ { "Atom": { "atom": "232" } },
+ { "Atom": { "atom": "240" } },
+ { "Atom": { "atom": "248" } },
+ { "Atom": { "atom": "256" } }
+ ]
+ }
+ },
+ { "Atom": { "atom": "x" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "0" } },
+ { "Atom": { "atom": "1" } },
+ { "Atom": { "atom": "2" } },
+ { "Atom": { "atom": "3" } },
+ { "Atom": { "atom": "4" } },
+ { "Atom": { "atom": "5" } },
+ { "Atom": { "atom": "6" } },
+ { "Atom": { "atom": "7" } },
+ { "Atom": { "atom": "9" } },
+ { "Atom": { "atom": "10" } },
+ { "Atom": { "atom": "11" } },
+ { "Atom": { "atom": "12" } },
+ { "Atom": { "atom": "13" } },
+ { "Atom": { "atom": "14" } },
+ { "Atom": { "atom": "15" } },
+ { "Atom": { "atom": "17" } },
+ { "Atom": { "atom": "18" } },
+ { "Atom": { "atom": "19" } },
+ { "Atom": { "atom": "20" } },
+ { "Atom": { "atom": "21" } },
+ { "Atom": { "atom": "22" } },
+ { "Atom": { "atom": "23" } },
+ { "Atom": { "atom": "25" } },
+ { "Atom": { "atom": "26" } },
+ { "Atom": { "atom": "27" } },
+ { "Atom": { "atom": "28" } },
+ { "Atom": { "atom": "29" } },
+ { "Atom": { "atom": "30" } },
+ { "Atom": { "atom": "31" } },
+ { "Atom": { "atom": "33" } },
+ { "Atom": { "atom": "34" } },
+ { "Atom": { "atom": "35" } },
+ { "Atom": { "atom": "36" } },
+ { "Atom": { "atom": "37" } },
+ { "Atom": { "atom": "38" } },
+ { "Atom": { "atom": "39" } },
+ { "Atom": { "atom": "41" } },
+ { "Atom": { "atom": "42" } },
+ { "Atom": { "atom": "43" } },
+ { "Atom": { "atom": "44" } },
+ { "Atom": { "atom": "45" } },
+ { "Atom": { "atom": "46" } },
+ { "Atom": { "atom": "47" } },
+ { "Atom": { "atom": "49" } },
+ { "Atom": { "atom": "50" } },
+ { "Atom": { "atom": "51" } },
+ { "Atom": { "atom": "52" } },
+ { "Atom": { "atom": "53" } },
+ { "Atom": { "atom": "54" } },
+ { "Atom": { "atom": "55" } },
+ { "Atom": { "atom": "57" } },
+ { "Atom": { "atom": "58" } },
+ { "Atom": { "atom": "59" } },
+ { "Atom": { "atom": "60" } },
+ { "Atom": { "atom": "61" } },
+ { "Atom": { "atom": "62" } },
+ { "Atom": { "atom": "63" } },
+ { "Atom": { "atom": "65" } },
+ { "Atom": { "atom": "66" } },
+ { "Atom": { "atom": "67" } },
+ { "Atom": { "atom": "68" } },
+ { "Atom": { "atom": "69" } },
+ { "Atom": { "atom": "70" } },
+ { "Atom": { "atom": "71" } },
+ { "Atom": { "atom": "73" } },
+ { "Atom": { "atom": "74" } },
+ { "Atom": { "atom": "75" } },
+ { "Atom": { "atom": "76" } },
+ { "Atom": { "atom": "77" } },
+ { "Atom": { "atom": "78" } },
+ { "Atom": { "atom": "79" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulForKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "for" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulFunctionKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "function" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulGasKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "gas" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulGasLimitKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "gaslimit" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulGasPriceKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "gasprice" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulGtKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "gt" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulGweiKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.7.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "gwei" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulHexKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "hex" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulHoursKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "hours" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulIfKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "if" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulImmutableKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "immutable" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulImplementsKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "implements" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulImportKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "import" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulIndexedKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "indexed" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulInKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.6.8" } },
+ "value": { "Atom": { "atom": "in" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulInlineKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "inline" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulInterfaceKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "interface" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulInternalKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "internal" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulIntKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "int" } },
+ {
+ "Optional": {
+ "value": {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } },
+ { "Atom": { "atom": "88" } },
+ { "Atom": { "atom": "96" } },
+ { "Atom": { "atom": "104" } },
+ { "Atom": { "atom": "112" } },
+ { "Atom": { "atom": "120" } },
+ { "Atom": { "atom": "128" } },
+ { "Atom": { "atom": "136" } },
+ { "Atom": { "atom": "144" } },
+ { "Atom": { "atom": "152" } },
+ { "Atom": { "atom": "160" } },
+ { "Atom": { "atom": "168" } },
+ { "Atom": { "atom": "176" } },
+ { "Atom": { "atom": "184" } },
+ { "Atom": { "atom": "192" } },
+ { "Atom": { "atom": "200" } },
+ { "Atom": { "atom": "208" } },
+ { "Atom": { "atom": "216" } },
+ { "Atom": { "atom": "224" } },
+ { "Atom": { "atom": "232" } },
+ { "Atom": { "atom": "240" } },
+ { "Atom": { "atom": "248" } },
+ { "Atom": { "atom": "256" } }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulInvalidKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "invalid" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulIsKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "is" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulIsZeroKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "iszero" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulJumpKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ { "enabled": { "Till": { "till": "0.5.0" } }, "value": { "Atom": { "atom": "jump" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulJumpiKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ { "enabled": { "Till": { "till": "0.5.0" } }, "value": { "Atom": { "atom": "jumpi" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulKeccak256Keyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.4.12" } },
+ "reserved": { "From": { "from": "0.4.12" } },
+ "value": { "Atom": { "atom": "keccak256" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulLeaveKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.6.0" } },
+ "reserved": { "From": { "from": "0.7.1" } },
+ "value": { "Atom": { "atom": "leave" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulLetKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "let" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulLibraryKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "library" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulLog0Keyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "log0" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulLog1Keyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "log1" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulLog2Keyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "log2" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulLog3Keyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "log3" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulLog4Keyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "log4" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulLtKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "lt" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulMacroKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "macro" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulMappingKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "mapping" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulMatchKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "match" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulMemoryKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "memory" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulMinutesKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "minutes" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulMCopyKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.8.24" } },
+ "reserved": { "From": { "from": "0.8.25" } },
+ "value": { "Atom": { "atom": "mcopy" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulMLoadKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "mload" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulModKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "mod" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulModifierKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "modifier" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulMSizeKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "msize" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulMStoreKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "mstore" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulMStore8Keyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "mstore8" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulMulKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "mul" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulMulModKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "mulmod" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulMutableKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "mutable" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulNewKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "new" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulNotKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "not" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulNullKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "null" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulNumberKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "number" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulOfKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "of" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulOrKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "or" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulOriginKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "origin" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulOverrideKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "override" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulPartialKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "partial" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulPayableKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "payable" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulPopKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "pop" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulPragmaKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "pragma" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulPrevRandaoKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.8.18" } },
+ "reserved": { "From": { "from": "0.8.18" } },
+ "value": { "Atom": { "atom": "prevrandao" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulPrivateKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "private" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulPromiseKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "promise" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulPublicKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "public" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulPureKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "pure" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulReceiveKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.6.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "receive" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulReferenceKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "reference" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulRelocatableKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "relocatable" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulReturnDataCopyKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.4.12" } },
+ "reserved": { "From": { "from": "0.4.12" } },
+ "value": { "Atom": { "atom": "returndatacopy" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulReturnDataSizeKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.4.12" } },
+ "reserved": { "From": { "from": "0.4.12" } },
+ "value": { "Atom": { "atom": "returndatasize" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulReturnKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "return" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulReturnsKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "returns" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulRevertKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "revert" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSarKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ { "reserved": { "From": { "from": "0.4.21" } }, "value": { "Atom": { "atom": "sar" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSDivKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "sdiv" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSealedKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "sealed" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSecondsKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "seconds" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSelfBalanceKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ { "reserved": { "From": { "from": "0.5.12" } }, "value": { "Atom": { "atom": "selfbalance" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSelfDestructKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "selfdestruct" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSgtKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "sgt" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSha3Keyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "Till": { "till": "0.5.0" } },
+ "reserved": { "Till": { "till": "0.5.0" } },
+ "value": { "Atom": { "atom": "sha3" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulShlKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ { "reserved": { "From": { "from": "0.4.21" } }, "value": { "Atom": { "atom": "shl" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulShrKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ { "reserved": { "From": { "from": "0.4.21" } }, "value": { "Atom": { "atom": "shr" } } }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSignExtendKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "signextend" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSizeOfKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "sizeof" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSLoadKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "sload" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSltKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "slt" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSModKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "smod" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSStoreKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "sstore" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulStaticCallKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.4.12" } },
+ "reserved": { "From": { "from": "0.4.12" } },
+ "value": { "Atom": { "atom": "staticcall" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulStaticKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "static" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulStopKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "stop" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulStorageKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "storage" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulStringKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "string" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulStructKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "struct" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSubKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "sub" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSuicideKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "Till": { "till": "0.5.0" } },
+ "reserved": { "Till": { "till": "0.5.0" } },
+ "value": { "Atom": { "atom": "suicide" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSuperKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "super" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSupportsKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "supports" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSwitchKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "switch" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulSzaboKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.0" } },
+ "value": { "Atom": { "atom": "szabo" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulTimestampKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "timestamp" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulThisKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "enabled": "Never", "value": { "Atom": { "atom": "this" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulThrowKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "throw" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulTLoadKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.8.24" } },
+ "reserved": { "From": { "from": "0.8.25" } },
+ "value": { "Atom": { "atom": "tload" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulTrueKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "true" } } }]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulTStoreKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": { "From": { "from": "0.8.24" } },
+ "reserved": { "From": { "from": "0.8.25" } },
+ "value": { "Atom": { "atom": "tstore" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulTryKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "try" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulTypeDefKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "typedef" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulTypeKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "type" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulTypeOfKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "typeof" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulUfixedKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "ufixed" } }
+ },
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "ufixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } },
+ { "Atom": { "atom": "88" } },
+ { "Atom": { "atom": "96" } },
+ { "Atom": { "atom": "104" } },
+ { "Atom": { "atom": "112" } },
+ { "Atom": { "atom": "120" } },
+ { "Atom": { "atom": "128" } },
+ { "Atom": { "atom": "136" } },
+ { "Atom": { "atom": "144" } },
+ { "Atom": { "atom": "152" } },
+ { "Atom": { "atom": "160" } },
+ { "Atom": { "atom": "168" } },
+ { "Atom": { "atom": "176" } }
+ ]
+ }
+ },
+ { "Atom": { "atom": "x" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "ufixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "184x8" } },
+ { "Atom": { "atom": "184x16" } },
+ { "Atom": { "atom": "184x24" } },
+ { "Atom": { "atom": "184x32" } },
+ { "Atom": { "atom": "184x40" } },
+ { "Atom": { "atom": "184x48" } },
+ { "Atom": { "atom": "184x56" } },
+ { "Atom": { "atom": "184x64" } },
+ { "Atom": { "atom": "184x72" } },
+ { "Atom": { "atom": "192x8" } },
+ { "Atom": { "atom": "192x16" } },
+ { "Atom": { "atom": "192x24" } },
+ { "Atom": { "atom": "192x32" } },
+ { "Atom": { "atom": "192x40" } },
+ { "Atom": { "atom": "192x48" } },
+ { "Atom": { "atom": "192x56" } },
+ { "Atom": { "atom": "192x64" } },
+ { "Atom": { "atom": "200x8" } },
+ { "Atom": { "atom": "200x16" } },
+ { "Atom": { "atom": "200x24" } },
+ { "Atom": { "atom": "200x32" } },
+ { "Atom": { "atom": "200x40" } },
+ { "Atom": { "atom": "200x48" } },
+ { "Atom": { "atom": "200x56" } },
+ { "Atom": { "atom": "208x8" } },
+ { "Atom": { "atom": "208x16" } },
+ { "Atom": { "atom": "208x24" } },
+ { "Atom": { "atom": "208x32" } },
+ { "Atom": { "atom": "208x40" } },
+ { "Atom": { "atom": "208x48" } },
+ { "Atom": { "atom": "216x8" } },
+ { "Atom": { "atom": "216x16" } },
+ { "Atom": { "atom": "216x24" } },
+ { "Atom": { "atom": "216x32" } },
+ { "Atom": { "atom": "216x40" } },
+ { "Atom": { "atom": "224x8" } },
+ { "Atom": { "atom": "224x16" } },
+ { "Atom": { "atom": "224x24" } },
+ { "Atom": { "atom": "224x32" } },
+ { "Atom": { "atom": "232x8" } },
+ { "Atom": { "atom": "232x16" } },
+ { "Atom": { "atom": "232x24" } },
+ { "Atom": { "atom": "240x8" } },
+ { "Atom": { "atom": "240x16" } },
+ { "Atom": { "atom": "248x8" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.4.14", "till": "0.7.1" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "ufixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "184x80" } },
+ { "Atom": { "atom": "192x72" } },
+ { "Atom": { "atom": "192x80" } },
+ { "Atom": { "atom": "200x64" } },
+ { "Atom": { "atom": "200x72" } },
+ { "Atom": { "atom": "200x80" } },
+ { "Atom": { "atom": "208x56" } },
+ { "Atom": { "atom": "208x64" } },
+ { "Atom": { "atom": "208x72" } },
+ { "Atom": { "atom": "208x80" } },
+ { "Atom": { "atom": "216x48" } },
+ { "Atom": { "atom": "216x56" } },
+ { "Atom": { "atom": "216x64" } },
+ { "Atom": { "atom": "216x72" } },
+ { "Atom": { "atom": "216x80" } },
+ { "Atom": { "atom": "224x40" } },
+ { "Atom": { "atom": "224x48" } },
+ { "Atom": { "atom": "224x56" } },
+ { "Atom": { "atom": "224x64" } },
+ { "Atom": { "atom": "224x72" } },
+ { "Atom": { "atom": "224x80" } },
+ { "Atom": { "atom": "232x32" } },
+ { "Atom": { "atom": "232x40" } },
+ { "Atom": { "atom": "232x48" } },
+ { "Atom": { "atom": "232x56" } },
+ { "Atom": { "atom": "232x64" } },
+ { "Atom": { "atom": "232x72" } },
+ { "Atom": { "atom": "232x80" } },
+ { "Atom": { "atom": "240x24" } },
+ { "Atom": { "atom": "240x32" } },
+ { "Atom": { "atom": "240x40" } },
+ { "Atom": { "atom": "240x48" } },
+ { "Atom": { "atom": "240x56" } },
+ { "Atom": { "atom": "240x64" } },
+ { "Atom": { "atom": "240x72" } },
+ { "Atom": { "atom": "240x80" } },
+ { "Atom": { "atom": "248x16" } },
+ { "Atom": { "atom": "248x24" } },
+ { "Atom": { "atom": "248x32" } },
+ { "Atom": { "atom": "248x40" } },
+ { "Atom": { "atom": "248x48" } },
+ { "Atom": { "atom": "248x56" } },
+ { "Atom": { "atom": "248x64" } },
+ { "Atom": { "atom": "248x72" } },
+ { "Atom": { "atom": "248x80" } },
+ { "Atom": { "atom": "256x8" } },
+ { "Atom": { "atom": "256x16" } },
+ { "Atom": { "atom": "256x24" } },
+ { "Atom": { "atom": "256x32" } },
+ { "Atom": { "atom": "256x40" } },
+ { "Atom": { "atom": "256x48" } },
+ { "Atom": { "atom": "256x56" } },
+ { "Atom": { "atom": "256x64" } },
+ { "Atom": { "atom": "256x72" } },
+ { "Atom": { "atom": "256x80" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.4.14", "till": "0.7.1" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "ufixed" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } },
+ { "Atom": { "atom": "88" } },
+ { "Atom": { "atom": "96" } },
+ { "Atom": { "atom": "104" } },
+ { "Atom": { "atom": "112" } },
+ { "Atom": { "atom": "120" } },
+ { "Atom": { "atom": "128" } },
+ { "Atom": { "atom": "136" } },
+ { "Atom": { "atom": "144" } },
+ { "Atom": { "atom": "152" } },
+ { "Atom": { "atom": "160" } },
+ { "Atom": { "atom": "168" } },
+ { "Atom": { "atom": "176" } },
+ { "Atom": { "atom": "184" } },
+ { "Atom": { "atom": "192" } },
+ { "Atom": { "atom": "200" } },
+ { "Atom": { "atom": "208" } },
+ { "Atom": { "atom": "216" } },
+ { "Atom": { "atom": "224" } },
+ { "Atom": { "atom": "232" } },
+ { "Atom": { "atom": "240" } },
+ { "Atom": { "atom": "248" } },
+ { "Atom": { "atom": "256" } }
+ ]
+ }
+ },
+ { "Atom": { "atom": "x" } },
+ {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "0" } },
+ { "Atom": { "atom": "1" } },
+ { "Atom": { "atom": "2" } },
+ { "Atom": { "atom": "3" } },
+ { "Atom": { "atom": "4" } },
+ { "Atom": { "atom": "5" } },
+ { "Atom": { "atom": "6" } },
+ { "Atom": { "atom": "7" } },
+ { "Atom": { "atom": "9" } },
+ { "Atom": { "atom": "10" } },
+ { "Atom": { "atom": "11" } },
+ { "Atom": { "atom": "12" } },
+ { "Atom": { "atom": "13" } },
+ { "Atom": { "atom": "14" } },
+ { "Atom": { "atom": "15" } },
+ { "Atom": { "atom": "17" } },
+ { "Atom": { "atom": "18" } },
+ { "Atom": { "atom": "19" } },
+ { "Atom": { "atom": "20" } },
+ { "Atom": { "atom": "21" } },
+ { "Atom": { "atom": "22" } },
+ { "Atom": { "atom": "23" } },
+ { "Atom": { "atom": "25" } },
+ { "Atom": { "atom": "26" } },
+ { "Atom": { "atom": "27" } },
+ { "Atom": { "atom": "28" } },
+ { "Atom": { "atom": "29" } },
+ { "Atom": { "atom": "30" } },
+ { "Atom": { "atom": "31" } },
+ { "Atom": { "atom": "33" } },
+ { "Atom": { "atom": "34" } },
+ { "Atom": { "atom": "35" } },
+ { "Atom": { "atom": "36" } },
+ { "Atom": { "atom": "37" } },
+ { "Atom": { "atom": "38" } },
+ { "Atom": { "atom": "39" } },
+ { "Atom": { "atom": "41" } },
+ { "Atom": { "atom": "42" } },
+ { "Atom": { "atom": "43" } },
+ { "Atom": { "atom": "44" } },
+ { "Atom": { "atom": "45" } },
+ { "Atom": { "atom": "46" } },
+ { "Atom": { "atom": "47" } },
+ { "Atom": { "atom": "49" } },
+ { "Atom": { "atom": "50" } },
+ { "Atom": { "atom": "51" } },
+ { "Atom": { "atom": "52" } },
+ { "Atom": { "atom": "53" } },
+ { "Atom": { "atom": "54" } },
+ { "Atom": { "atom": "55" } },
+ { "Atom": { "atom": "57" } },
+ { "Atom": { "atom": "58" } },
+ { "Atom": { "atom": "59" } },
+ { "Atom": { "atom": "60" } },
+ { "Atom": { "atom": "61" } },
+ { "Atom": { "atom": "62" } },
+ { "Atom": { "atom": "63" } },
+ { "Atom": { "atom": "65" } },
+ { "Atom": { "atom": "66" } },
+ { "Atom": { "atom": "67" } },
+ { "Atom": { "atom": "68" } },
+ { "Atom": { "atom": "69" } },
+ { "Atom": { "atom": "70" } },
+ { "Atom": { "atom": "71" } },
+ { "Atom": { "atom": "73" } },
+ { "Atom": { "atom": "74" } },
+ { "Atom": { "atom": "75" } },
+ { "Atom": { "atom": "76" } },
+ { "Atom": { "atom": "77" } },
+ { "Atom": { "atom": "78" } },
+ { "Atom": { "atom": "79" } }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulUintKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": {
+ "Sequence": {
+ "values": [
+ { "Atom": { "atom": "uint" } },
+ {
+ "Optional": {
+ "value": {
+ "Choice": {
+ "values": [
+ { "Atom": { "atom": "8" } },
+ { "Atom": { "atom": "16" } },
+ { "Atom": { "atom": "24" } },
+ { "Atom": { "atom": "32" } },
+ { "Atom": { "atom": "40" } },
+ { "Atom": { "atom": "48" } },
+ { "Atom": { "atom": "56" } },
+ { "Atom": { "atom": "64" } },
+ { "Atom": { "atom": "72" } },
+ { "Atom": { "atom": "80" } },
+ { "Atom": { "atom": "88" } },
+ { "Atom": { "atom": "96" } },
+ { "Atom": { "atom": "104" } },
+ { "Atom": { "atom": "112" } },
+ { "Atom": { "atom": "120" } },
+ { "Atom": { "atom": "128" } },
+ { "Atom": { "atom": "136" } },
+ { "Atom": { "atom": "144" } },
+ { "Atom": { "atom": "152" } },
+ { "Atom": { "atom": "160" } },
+ { "Atom": { "atom": "168" } },
+ { "Atom": { "atom": "176" } },
+ { "Atom": { "atom": "184" } },
+ { "Atom": { "atom": "192" } },
+ { "Atom": { "atom": "200" } },
+ { "Atom": { "atom": "208" } },
+ { "Atom": { "atom": "216" } },
+ { "Atom": { "atom": "224" } },
+ { "Atom": { "atom": "232" } },
+ { "Atom": { "atom": "240" } },
+ { "Atom": { "atom": "248" } },
+ { "Atom": { "atom": "256" } }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulUncheckedKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.5.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "unchecked" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulUsingKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "using" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulVarKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.6.5" } },
+ "value": { "Atom": { "atom": "var" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulViewKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "view" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulVirtualKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Range": { "from": "0.6.0", "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "virtual" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulWeeksKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "weeks" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulWeiKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "wei" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulWhileKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "while" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulYearsKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [
+ {
+ "enabled": "Never",
+ "reserved": { "Till": { "till": "0.7.1" } },
+ "value": { "Atom": { "atom": "years" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "Keyword": {
+ "item": {
+ "name": "YulXorKeyword",
+ "identifier": "YulIdentifier",
+ "definitions": [{ "value": { "Atom": { "atom": "xor" } } }]
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "built_ins": [
+ {
+ "BuiltInFunction": {
+ "item": { "name": "addmod", "parameters": ["uint x", "uint y", "uint k"], "return_type": "uint" }
+ }
+ },
+ { "BuiltInFunction": { "item": { "name": "assert", "parameters": ["bool condition"] } } },
+ {
+ "BuiltInFunction": {
+ "item": {
+ "name": "blockhash",
+ "parameters": ["uint blockNumber"],
+ "return_type": "bytes32",
+ "enabled": { "From": { "from": "0.4.22" } }
+ }
+ }
+ },
+ {
+ "BuiltInFunction": {
+ "item": {
+ "name": "blobhash",
+ "parameters": ["uint index"],
+ "return_type": "bytes32",
+ "enabled": { "From": { "from": "0.8.24" } }
+ }
+ }
+ },
+ {
+ "BuiltInFunction": {
+ "item": {
+ "name": "ecrecover",
+ "parameters": ["bytes32 hash", "uint8 v", "bytes32 r", "bytes32 s"],
+ "return_type": "address"
+ }
+ }
+ },
+ {
+ "BuiltInFunction": {
+ "item": { "name": "gasleft", "return_type": "uint256", "enabled": { "From": { "from": "0.4.22" } } }
+ }
+ },
+ {
+ "BuiltInFunction": { "item": { "name": "keccak256", "parameters": ["bytes memory"], "return_type": "bytes32" } }
+ },
+ {
+ "BuiltInFunction": {
+ "item": { "name": "log0", "parameters": ["bytes32"], "enabled": { "Till": { "till": "0.8.0" } } }
+ }
+ },
+ {
+ "BuiltInFunction": {
+ "item": { "name": "log1", "parameters": ["bytes32", "bytes32"], "enabled": { "Till": { "till": "0.8.0" } } }
+ }
+ },
+ {
+ "BuiltInFunction": {
+ "item": {
+ "name": "log2",
+ "parameters": ["bytes32", "bytes32", "bytes32"],
+ "enabled": { "Till": { "till": "0.8.0" } }
+ }
+ }
+ },
+ {
+ "BuiltInFunction": {
+ "item": {
+ "name": "log3",
+ "parameters": ["bytes32", "bytes32", "bytes32", "bytes32"],
+ "enabled": { "Till": { "till": "0.8.0" } }
+ }
+ }
+ },
+ {
+ "BuiltInFunction": {
+ "item": {
+ "name": "log4",
+ "parameters": ["bytes32", "bytes32", "bytes32", "bytes32", "bytes32"],
+ "enabled": { "Till": { "till": "0.8.0" } }
+ }
+ }
+ },
+ {
+ "BuiltInFunction": {
+ "item": { "name": "mulmod", "parameters": ["uint x", "uint y", "uint k"], "return_type": "uint" }
+ }
+ },
+ { "BuiltInFunction": { "item": { "name": "require", "parameters": ["bool condition"] } } },
+ {
+ "BuiltInFunction": {
+ "item": {
+ "name": "require",
+ "parameters": ["bool condition", "string memory message"],
+ "enabled": { "From": { "from": "0.4.22" } }
+ }
+ }
+ },
+ {
+ "BuiltInFunction": {
+ "item": {
+ "name": "require",
+ "parameters": ["bool condition", "Error error"],
+ "enabled": { "From": { "from": "0.8.26" } }
+ }
+ }
+ },
+ { "BuiltInFunction": { "item": { "name": "revert" } } },
+ {
+ "BuiltInFunction": {
+ "item": {
+ "name": "revert",
+ "parameters": ["string memory reason"],
+ "enabled": { "From": { "from": "0.4.22" } }
+ }
+ }
+ },
+ {
+ "BuiltInFunction": { "item": { "name": "ripemd160", "parameters": ["bytes memory"], "return_type": "bytes20" } }
+ },
+ { "BuiltInFunction": { "item": { "name": "selfdestruct", "parameters": ["address payable recipient"] } } },
+ { "BuiltInFunction": { "item": { "name": "sha256", "parameters": ["bytes memory"], "return_type": "bytes32" } } },
+ {
+ "BuiltInFunction": {
+ "item": {
+ "name": "sha3",
+ "parameters": ["bytes memory"],
+ "return_type": "bytes32",
+ "enabled": { "Till": { "till": "0.5.0" } }
+ }
+ }
+ },
+ {
+ "BuiltInFunction": {
+ "item": {
+ "name": "suicide",
+ "parameters": ["address payable recipient"],
+ "enabled": { "Till": { "till": "0.5.0" } }
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$AbiType",
+ "functions": [
+ {
+ "name": "decode",
+ "parameters": ["bytes memory encodedData", "$Type[] encodedTypesTuple"],
+ "return_type": "$Any[]",
+ "enabled": { "From": { "from": "0.5.0" } }
+ },
+ {
+ "name": "encode",
+ "parameters": ["$Any[] valuesToEncode"],
+ "return_type": "bytes memory",
+ "enabled": { "From": { "from": "0.4.22" } }
+ },
+ {
+ "name": "encodeCall",
+ "parameters": ["function() functionPointer", "$Any[] functionArgumentsTuple"],
+ "return_type": "bytes memory",
+ "enabled": { "From": { "from": "0.8.11" } }
+ },
+ {
+ "name": "encodePacked",
+ "parameters": ["$Any[] valuesToEncode"],
+ "return_type": "bytes memory",
+ "enabled": { "From": { "from": "0.4.22" } }
+ },
+ {
+ "name": "encodeWithSelector",
+ "parameters": ["bytes4 selector", "$Any[] functionArgumentsTuple"],
+ "return_type": "bytes memory",
+ "enabled": { "From": { "from": "0.4.22" } }
+ },
+ {
+ "name": "encodeWithSignature",
+ "parameters": ["string memory signature", "$Any[] valuesToEncode"],
+ "return_type": "bytes memory",
+ "enabled": { "From": { "from": "0.4.22" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$address",
+ "fields": [
+ { "definition": "uint256 balance" },
+ { "definition": "bytes code", "enabled": { "From": { "from": "0.8.0" } } },
+ { "definition": "bytes32 codehash", "enabled": { "From": { "from": "0.8.0" } } }
+ ],
+ "functions": [
+ {
+ "name": "call",
+ "parameters": ["bytes memory"],
+ "return_type": "bool",
+ "enabled": { "Till": { "till": "0.5.0" } }
+ },
+ {
+ "name": "call",
+ "parameters": ["bytes memory"],
+ "return_type": "bool, bytes memory",
+ "enabled": { "From": { "from": "0.5.0" } }
+ },
+ {
+ "name": "callcode",
+ "parameters": ["bytes memory"],
+ "return_type": "bool, bytes memory",
+ "enabled": { "Till": { "till": "0.5.0" } }
+ },
+ {
+ "name": "delegatecall",
+ "parameters": ["bytes memory"],
+ "return_type": "bool",
+ "enabled": { "Till": { "till": "0.5.0" } }
+ },
+ {
+ "name": "delegatecall",
+ "parameters": ["bytes memory"],
+ "return_type": "bool, bytes memory",
+ "enabled": { "From": { "from": "0.5.0" } }
+ },
+ { "name": "send", "parameters": ["uint256 amount"], "return_type": "bool" },
+ {
+ "name": "staticcall",
+ "parameters": ["bytes memory"],
+ "return_type": "bool, bytes memory",
+ "enabled": { "From": { "from": "0.5.0" } }
+ },
+ { "name": "transfer", "parameters": ["uint256 amount"] }
+ ]
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$Array",
+ "fields": [{ "definition": "uint length" }],
+ "functions": [
+ { "name": "push", "return_type": "$ValueType", "enabled": { "From": { "from": "0.6.0" } } },
+ {
+ "name": "push",
+ "parameters": ["$ValueType element"],
+ "return_type": "uint",
+ "enabled": { "Till": { "till": "0.6.0" } }
+ },
+ { "name": "push", "parameters": ["$ValueType element"], "enabled": { "From": { "from": "0.6.0" } } },
+ { "name": "pop" }
+ ]
+ }
+ }
+ },
+ { "BuiltInType": { "item": { "name": "$FixedArray", "fields": [{ "definition": "uint length" }] } } },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$BlockType",
+ "fields": [
+ { "definition": "uint basefee", "enabled": { "From": { "from": "0.8.7" } } },
+ { "definition": "uint blobbasefee", "enabled": { "From": { "from": "0.8.24" } } },
+ { "definition": "uint chainid", "enabled": { "From": { "from": "0.8.0" } } },
+ { "definition": "address payable coinbase" },
+ { "definition": "uint difficulty" },
+ { "definition": "uint gaslimit" },
+ { "definition": "uint number" },
+ { "definition": "uint prevrandao", "enabled": { "From": { "from": "0.8.18" } } },
+ { "definition": "uint timestamp" }
+ ],
+ "functions": [
+ {
+ "name": "blockhash",
+ "parameters": ["uint"],
+ "return_type": "bytes32",
+ "enabled": { "Till": { "till": "0.5.0" } }
+ }
+ ]
+ }
+ }
+ },
+ { "BuiltInType": { "item": { "name": "$bytes", "fields": [{ "definition": "uint length" }] } } },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$BytesType",
+ "functions": [
+ { "name": "concat", "parameters": ["bytes[] bytesToConcatenate"], "return_type": "bytes memory" }
+ ]
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$CallOptions",
+ "fields": [{ "definition": "uint gas" }, { "definition": "uint salt" }, { "definition": "uint value" }],
+ "enabled": { "From": { "from": "0.6.2" } }
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "Error",
+ "fields": [{ "definition": "string reason" }],
+ "enabled": { "From": { "from": "0.6.0" } }
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$ErrorType",
+ "fields": [{ "definition": "bytes4 selector" }],
+ "enabled": { "From": { "from": "0.8.4" } }
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$Function",
+ "functions": [
+ {
+ "name": "gas",
+ "parameters": ["uint amount"],
+ "return_type": "function()",
+ "enabled": { "Till": { "till": "0.7.0" } }
+ },
+ {
+ "name": "value",
+ "parameters": ["uint amount"],
+ "return_type": "function()",
+ "enabled": { "Till": { "till": "0.7.0" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$ExternalFunction",
+ "fields": [
+ { "definition": "address address", "enabled": { "From": { "from": "0.8.2" } } },
+ { "definition": "bytes4 selector", "enabled": { "From": { "from": "0.4.17" } } }
+ ],
+ "functions": [
+ {
+ "name": "gas",
+ "parameters": ["uint amount"],
+ "return_type": "function()",
+ "enabled": { "Till": { "till": "0.7.0" } }
+ },
+ {
+ "name": "value",
+ "parameters": ["uint amount"],
+ "return_type": "function()",
+ "enabled": { "Till": { "till": "0.7.0" } }
+ }
+ ]
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$MessageType",
+ "fields": [
+ { "definition": "bytes data" },
+ { "definition": "uint256 gas", "enabled": { "Till": { "till": "0.5.0" } } },
+ { "definition": "address payable sender", "enabled": { "Till": { "till": "0.8.0" } } },
+ { "definition": "address sender", "enabled": { "From": { "from": "0.8.0" } } },
+ { "definition": "bytes4 sig" },
+ { "definition": "uint value" }
+ ]
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "Panic",
+ "fields": [{ "definition": "uint errorCode" }],
+ "enabled": { "From": { "from": "0.6.0" } }
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$StringType",
+ "functions": [
+ { "name": "concat", "parameters": ["string[] stringsToConcatenate"], "return_type": "string memory" }
+ ]
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$TransactionType",
+ "fields": [
+ { "definition": "uint gasprice" },
+ { "definition": "address payable origin", "enabled": { "Till": { "till": "0.8.0" } } },
+ { "definition": "address origin", "enabled": { "From": { "from": "0.8.0" } } }
+ ]
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$ContractTypeType",
+ "fields": [
+ { "definition": "string name" },
+ { "definition": "bytes creationCode", "enabled": { "From": { "from": "0.5.3" } } },
+ { "definition": "bytes runtimeCode", "enabled": { "From": { "from": "0.5.3" } } },
+ { "definition": "bytes4 interfaceId", "enabled": { "From": { "from": "0.6.7" } } }
+ ]
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$InterfaceTypeType",
+ "fields": [
+ { "definition": "string name" },
+ { "definition": "bytes4 interfaceId", "enabled": { "From": { "from": "0.6.7" } } }
+ ]
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$IntTypeType",
+ "fields": [
+ { "definition": "int min", "enabled": { "From": { "from": "0.6.8" } } },
+ { "definition": "int max", "enabled": { "From": { "from": "0.6.8" } } }
+ ]
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$UserDefinedValueType",
+ "functions": [
+ { "name": "wrap", "parameters": ["$WrappedType elementaryType"], "return_type": "$UserType" },
+ { "name": "unwrap", "parameters": ["$UserType userType"], "return_type": "$WrappedType" }
+ ],
+ "enabled": { "From": { "from": "0.8.8" } }
+ }
+ }
+ },
+ {
+ "BuiltInType": {
+ "item": {
+ "name": "$YulExternal",
+ "fields": [{ "definition": "uint slot" }, { "definition": "uint offset" }, { "definition": "uint length" }]
+ }
+ }
+ },
+ { "BuiltInVariable": { "item": { "definition": "$Function $placeholder" } } },
+ { "BuiltInVariable": { "item": { "definition": "$AbiType abi" } } },
+ { "BuiltInVariable": { "item": { "definition": "$BlockType block" } } },
+ { "BuiltInVariable": { "item": { "definition": "$BytesType $bytes" } } },
+ { "BuiltInVariable": { "item": { "definition": "$MessageType msg" } } },
+ { "BuiltInVariable": { "item": { "definition": "uint now", "enabled": { "Till": { "till": "0.7.0" } } } } },
+ { "BuiltInVariable": { "item": { "definition": "$StringType $string" } } },
+ { "BuiltInVariable": { "item": { "definition": "$TransactionType tx" } } }
+ ]
+}
From d248ea0196a6fb40ea6d46bd29aa06656a5a5ee7 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 1 Jan 2025 15:18:44 -0800
Subject: [PATCH 2/4] [cargo] Bump the non-major-dependencies group with 9
updates (#1208)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Bumps the non-major-dependencies group with 9 updates:
| Package | From | To |
| --- | --- | --- |
| [anyhow](https://github.com/dtolnay/anyhow) | `1.0.94` | `1.0.95` |
| [console](https://github.com/console-rs/console) | `0.15.8` |
`0.15.10` |
| [env_logger](https://github.com/rust-cli/env_logger) | `0.11.5` |
`0.11.6` |
| [quote](https://github.com/dtolnay/quote) | `1.0.37` | `1.0.38` |
| [reqwest](https://github.com/seanmonstar/reqwest) | `0.12.9` |
`0.12.12` |
| [rustdoc-json](https://github.com/cargo-public-api/cargo-public-api) |
`0.9.3` | `0.9.4` |
| [serde](https://github.com/serde-rs/serde) | `1.0.216` | `1.0.217` |
| [serde_json](https://github.com/serde-rs/json) | `1.0.133` | `1.0.134`
|
| [syn](https://github.com/dtolnay/syn) | `2.0.90` | `2.0.93` |
Updates `anyhow` from 1.0.94 to 1.0.95
Release notes
Sourced from anyhow's
releases.
1.0.95
Commits
48be1ca
Release 1.0.95
a03d6d6
Merge pull request #402
from dtolnay/fromboxed
52e4abb
Add Error::from_boxed with documentation about bidirectional
?
ffecefc
Merge pull request #401
from dtolnay/construct
671f700
Add construct_ prefix to name of private construct functions
- See full diff in compare
view
Updates `console` from 0.15.8 to 0.15.10
Release notes
Sourced from console's
releases.
0.15.10
What's Changed
0.15.9
What's Changed
Changelog
Sourced from console's
changelog.
Changelog
Commits
Updates `env_logger` from 0.11.5 to 0.11.6
Release notes
Sourced from env_logger's
releases.
v0.11.6
[0.11.6] - 2024-12-20
Features
- Opt-in file and line rendering
Changelog
Sourced from env_logger's
changelog.
[0.11.6] - 2024-12-20
Features
- Opt-in file and line rendering
Commits
dc1a01a
chore: Release
65f81b3
docs: Update changelog
7742599
Merge pull request #345
from EriKWDev/main
59229bc
fix: Test result of everything enabled has changed
b0d4760
spelling + field names
1bad1f5
feature: ability to display source file path and line number with
default for...
cc97bf7
chore(deps): Update Rust Stable to v1.83 (#343)
240cd21
style: Make clippy happy
da7ff82
chore: Update from _rust template
ab1d854
chore(deps): Update Rust crate snapbox to v0.6.20 (#342)
- Additional commits viewable in compare
view
Updates `quote` from 1.0.37 to 1.0.38
Release notes
Sourced from quote's
releases.
1.0.38
- Support interpolating arrays inside of arrays using a repetition (#286)
Commits
0245506
Release 1.0.38
d978c51
Merge pull request #286
from dtolnay/array
09d1e42
Implement repetition for arrays
5bba89f
Add repetition test with array of array
aafba72
Prevent upload-artifact step from causing CI failure
c889896
Update not-quotable ui test for ToTokens impl changes
87c247f
Resolve some needless_lifetimes clippy lints
31d7a01
Ignore needless_lifetimes clippy lint
6cff24b
Upload CI Cargo.lock for reproducing failures
- See full diff in compare
view
Updates `reqwest` from 0.12.9 to 0.12.12
Release notes
Sourced from reqwest's
releases.
v0.12.11
What's Changed
Full Changelog: https://github.com/seanmonstar/reqwest/compare/v0.12.10...v0.12.11
v0.12.10
What's Changed
New Contributors
Thanks
Full Changelog: https://github.com/seanmonstar/reqwest/compare/v0.12.9...v0.12.10
Changelog
Sourced from reqwest's
changelog.
v0.12.12
- (wasm) Fix compilation by not compiler
tokio/time
on
WASM.
v0.12.11
- Fix decompression returning an error when HTTP/2 ends with an empty
data frame.
v0.12.10
- Add
ClientBuilder::connector_layer()
to allow
customizing the connector stack.
- Add
ClientBuilder::http2_max_header_list_size()
option.
- Fix propagating body size hint (
content-length
)
information when wrapping bodies.
- Fix decompression of chunked bodies so the connections can be reused
more often.
Commits
Updates `rustdoc-json` from 0.9.3 to 0.9.4
Changelog
Sourced from rustdoc-json's
changelog.
v0.9.4
- Bump deps. Most notably
cargo-manifest
from 0.16.0 to
0.17.0.
Commits
5ca99c1
Merge pull request #680
from SUPERCILEX/rustdoc-json-release
a98d1df
rustdoc-json v0.9.4
ec7cb8d
Merge pull request #677
from cargo-public-api/dependabot/cargo/home-0.5.11
fa6cd6f
Merge pull request #678
from cargo-public-api/dependabot/cargo/expect-test-1.5.1
793f0a9
Merge pull request #679
from cargo-public-api/dependabot/cargo/predicates-3.1.3
067a54c
build(deps): bump predicates from 3.1.2 to 3.1.3
fa200d6
build(deps): bump expect-test from 1.5.0 to 1.5.1
07c170f
build(deps): bump home from 0.5.9 to 0.5.11
1d78b9c
Merge pull request #676
from cargo-public-api/changelog
3256a9f
README.md: Don't reference CHANGELOG.md
- Additional commits viewable in compare
view
Updates `serde` from 1.0.216 to 1.0.217
Release notes
Sourced from serde's
releases.
v1.0.217
- Support serializing externally tagged unit variant inside flattened
field (#2786,
thanks
@Mingun
)
Commits
930401b
Release 1.0.217
cb6eaea
Fix roundtrip inconsistency:
b6f339c
Resolve repr_packed_without_abi clippy lint in tests
2a5caea
Merge pull request #2872
from dtolnay/ehpersonality
b9f93f9
Add no-std CI on stable compiler
eb5cd47
Drop #[lang = "eh_personality"] from no-std test
8478a3b
Merge pull request #2871
from dtolnay/nostdstart
dbb9091
Replace #[start] with extern fn main
- See full diff in compare
view
Updates `serde_json` from 1.0.133 to 1.0.134
Release notes
Sourced from serde_json's
releases.
v1.0.134
- Add
RawValue
associated constants for literal
null
, true
, false
(#1221,
thanks @bheylin
)
Commits
b2a1415
Release 1.0.134
9875785
Tweak wording of NULL/TRUE/FALSE documentation
4aa05b9
Merge pull request #1222
from dtolnay/rawvalueassoc
f42c7c7
Move RawValue associated constants into same impl block as public
functions
96576ba
Merge pull request #1221
from bheylin/add-const-raw-values-for-null-and-bools
4db66fb
Add 'static
lifetime to const
's
9c9aa1f
Add literal 'null', 'true' and 'false' consts to RawValue
struct.
- See full diff in compare
view
Updates `syn` from 2.0.90 to 2.0.93
Release notes
Sourced from syn's
releases.
2.0.93
- Fix expression parsing edge cases:
x as T <<= y
(#1804),
break as T
(#1805),
match x { _ if .. => {} }
(#1807)
- Fix expression printing edge cases:
|| -> T 'a: {}
(#1806),
if break x {}
(#1808, #1810)
2.0.92
- Fix parenthesization of jumps inside ranges (#1798)
2.0.91
- Support parsing
Vec<Arm>
using
parse_quote!
(#1796, #1797)
Commits
3f2acdc
Release 2.0.93
2ecf36a
Merge pull request #1810
from dtolnay/confusable
6240d9c
Recursive implementation of confusable_with_adjacent_block
39c8d4e
Merge pull request #1809
from dtolnay/permutations
c770215
Add exhaustive expressions parsing test
672aca9
Exclude slow expressions test from miri
52d1ebb
Merge pull request #1808
from dtolnay/ifbreak
7fbb4ae
Fix if break x {}
6baa793
Merge pull request #1807
from dtolnay/rangearrow
23f8f3b
Fix match x { _ if .. => {} }
- Additional commits viewable in compare
view
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore ` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore ` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore ` will
remove the ignore condition of the specified dependency and ignore
conditions
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
Cargo.lock | 216 ++++++++++++++++++++++++++---------------------------
Cargo.toml | 18 ++---
2 files changed, 116 insertions(+), 118 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index f0414f1d46..528900d499 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -113,9 +113,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.94"
+version = "1.0.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7"
+checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
dependencies = [
"backtrace",
]
@@ -240,9 +240,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "bytes"
-version = "1.5.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b"
[[package]]
name = "camino"
@@ -261,12 +261,12 @@ checksum = "1582e1c9e755dd6ad6b224dcffb135d199399a4568d454bd89fe515ca8425695"
[[package]]
name = "cargo-manifest"
-version = "0.16.1"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "999e8e607fe778257b51e0053903ed97594e56bc7a908c1f77320e9390c3b47b"
+checksum = "8b2ce2075c35e4b492b93e3d5dd1dd3670de553f15045595daef8164ed9a3751"
dependencies = [
"serde",
- "thiserror",
+ "thiserror 1.0.68",
"toml",
]
@@ -290,7 +290,7 @@ dependencies = [
"semver",
"serde",
"serde_json",
- "thiserror",
+ "thiserror 1.0.68",
]
[[package]]
@@ -380,7 +380,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -414,8 +414,8 @@ dependencies = [
"serde",
"strum",
"strum_macros",
- "syn 2.0.90",
- "thiserror",
+ "syn 2.0.93",
+ "thiserror 1.0.68",
]
[[package]]
@@ -425,7 +425,7 @@ dependencies = [
"itertools 0.13.0",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -461,7 +461,7 @@ dependencies = [
"serde",
"strum",
"strum_macros",
- "thiserror",
+ "thiserror 1.0.68",
]
[[package]]
@@ -538,15 +538,15 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]]
name = "console"
-version = "0.15.8"
+version = "0.15.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb"
+checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b"
dependencies = [
"encode_unicode",
- "lazy_static",
"libc",
- "unicode-width 0.1.10",
- "windows-sys 0.52.0",
+ "once_cell",
+ "unicode-width 0.2.0",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -657,7 +657,7 @@ dependencies = [
"ident_case",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -668,7 +668,7 @@ checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178"
dependencies = [
"darling_core",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -679,7 +679,7 @@ checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -706,7 +706,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -717,9 +717,9 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]]
name = "encode_unicode"
-version = "0.3.6"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
[[package]]
name = "encoding_rs"
@@ -748,7 +748,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -763,9 +763,9 @@ dependencies = [
[[package]]
name = "env_logger"
-version = "0.11.5"
+version = "0.11.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d"
+checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0"
dependencies = [
"anstream",
"anstyle",
@@ -1051,9 +1051,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "hyper"
-version = "1.3.1"
+version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d"
+checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0"
dependencies = [
"bytes",
"futures-channel",
@@ -1104,9 +1104,9 @@ dependencies = [
[[package]]
name = "hyper-util"
-version = "0.1.3"
+version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa"
+checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4"
dependencies = [
"bytes",
"futures-channel",
@@ -1117,7 +1117,6 @@ dependencies = [
"pin-project-lite",
"socket2",
"tokio",
- "tower",
"tower-service",
"tracing",
]
@@ -1144,7 +1143,7 @@ dependencies = [
"quote",
"serde",
"serde_json",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -1294,7 +1293,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -1550,7 +1549,7 @@ dependencies = [
"once_cell",
"semver",
"stack-graphs",
- "thiserror",
+ "thiserror 1.0.68",
]
[[package]]
@@ -1559,7 +1558,7 @@ version = "0.18.3"
dependencies = [
"nom",
"serde",
- "thiserror",
+ "thiserror 1.0.68",
]
[[package]]
@@ -1577,7 +1576,7 @@ dependencies = [
"string-interner",
"strum",
"strum_macros",
- "thiserror",
+ "thiserror 1.0.68",
]
[[package]]
@@ -1703,7 +1702,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -1751,7 +1750,7 @@ version = "2.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1acb4a4365a13f749a93f1a094a7805e5cfa0955373a9de860d962eaa3a5fe5a"
dependencies = [
- "thiserror",
+ "thiserror 1.0.68",
"ucd-trie",
]
@@ -1775,7 +1774,7 @@ dependencies = [
"pest_meta",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -1827,26 +1826,6 @@ dependencies = [
"siphasher",
]
-[[package]]
-name = "pin-project"
-version = "1.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
-dependencies = [
- "pin-project-internal",
-]
-
-[[package]]
-name = "pin-project-internal"
-version = "1.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.90",
-]
-
[[package]]
name = "pin-project-lite"
version = "0.2.13"
@@ -1890,7 +1869,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e"
dependencies = [
"proc-macro2",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -1936,14 +1915,14 @@ dependencies = [
"rustdoc-types",
"serde",
"serde_json",
- "thiserror",
+ "thiserror 1.0.68",
]
[[package]]
name = "quote"
-version = "1.0.37"
+version = "1.0.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
+checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
dependencies = [
"proc-macro2",
]
@@ -2041,9 +2020,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "reqwest"
-version = "0.12.9"
+version = "0.12.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f"
+checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da"
dependencies = [
"base64",
"bytes",
@@ -2075,6 +2054,7 @@ dependencies = [
"system-configuration",
"tokio",
"tokio-native-tls",
+ "tower",
"tower-service",
"url",
"wasm-bindgen",
@@ -2106,14 +2086,14 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
[[package]]
name = "rustdoc-json"
-version = "0.9.3"
+version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f95a83030cb4956fb60f3dda850a94c4ca31324b356b68d2ae8838d1d0e06b1d"
+checksum = "b9cba50605762dcbc2e103a3a8b195c83b6978aca443c7dd6699ed2971c213e5"
dependencies = [
"cargo-manifest",
"cargo_metadata",
"serde",
- "thiserror",
+ "thiserror 2.0.9",
"toml",
"tracing",
]
@@ -2250,29 +2230,29 @@ dependencies = [
[[package]]
name = "serde"
-version = "1.0.216"
+version = "1.0.217"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e"
+checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.216"
+version = "1.0.217"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e"
+checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
name = "serde_json"
-version = "1.0.133"
+version = "1.0.134"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377"
+checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d"
dependencies = [
"indexmap",
"itoa",
@@ -2363,7 +2343,7 @@ dependencies = [
"solidity_language",
"strum",
"strum_macros",
- "thiserror",
+ "thiserror 1.0.68",
]
[[package]]
@@ -2391,7 +2371,7 @@ dependencies = [
"strum",
"strum_macros",
"testlang_language",
- "thiserror",
+ "thiserror 1.0.68",
]
[[package]]
@@ -2578,7 +2558,7 @@ dependencies = [
"libc",
"lsp-positions",
"smallvec",
- "thiserror",
+ "thiserror 1.0.68",
]
[[package]]
@@ -2614,7 +2594,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustversion",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -2636,9 +2616,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.90"
+version = "2.0.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31"
+checksum = "9c786062daee0d6db1132800e623df74274a0a87322d8e183338e01b3d98d058"
dependencies = [
"proc-macro2",
"quote",
@@ -2662,7 +2642,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -2801,7 +2781,16 @@ version = "1.0.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892"
dependencies = [
- "thiserror-impl",
+ "thiserror-impl 1.0.68",
+]
+
+[[package]]
+name = "thiserror"
+version = "2.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc"
+dependencies = [
+ "thiserror-impl 2.0.9",
]
[[package]]
@@ -2812,7 +2801,18 @@ checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "2.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.93",
]
[[package]]
@@ -2912,39 +2912,37 @@ dependencies = [
[[package]]
name = "tower"
-version = "0.4.13"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
dependencies = [
"futures-core",
"futures-util",
- "pin-project",
"pin-project-lite",
+ "sync_wrapper",
"tokio",
"tower-layer",
"tower-service",
- "tracing",
]
[[package]]
name = "tower-layer"
-version = "0.3.2"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
[[package]]
name = "tower-service"
-version = "0.3.2"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
[[package]]
name = "tracing"
-version = "0.1.40"
+version = "0.1.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
dependencies = [
- "log",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
@@ -2952,20 +2950,20 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.27"
+version = "0.1.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
name = "tracing-core"
-version = "0.1.32"
+version = "0.1.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
dependencies = [
"once_cell",
]
@@ -3211,7 +3209,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
"wasm-bindgen-shared",
]
@@ -3245,7 +3243,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -3582,7 +3580,7 @@ dependencies = [
"heck",
"indexmap",
"prettyplease",
- "syn 2.0.90",
+ "syn 2.0.93",
"wasm-metadata",
"wit-bindgen-core",
"wit-component",
@@ -3598,7 +3596,7 @@ dependencies = [
"prettyplease",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
"wit-bindgen-core",
"wit-bindgen-rust",
]
@@ -3687,7 +3685,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
"synstructure",
]
@@ -3708,7 +3706,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
[[package]]
@@ -3728,7 +3726,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
"synstructure",
]
@@ -3757,5 +3755,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.93",
]
diff --git a/Cargo.toml b/Cargo.toml
index 9de5256933..21308200f8 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -89,7 +89,7 @@ testlang_npm_package = { path = "crates/testlang/outputs/npm/package", version =
#
# External
#
-anyhow = { version = "1.0.94", features = ["backtrace", "std"] }
+anyhow = { version = "1.0.95", features = ["backtrace", "std"] }
ariadne = { version = "0.2.0" }
# Currently 'bencher' backend API is under development/unstable.
# They recommend always running with the latest CLI version from 'main' until it is stabilized.
@@ -101,9 +101,9 @@ cargo-xwin = { version = "0.14.2" }
cargo-zigbuild = { version = "0.18.3" }
clap = { version = "4.5.13", features = ["derive", "wrap_help"] }
clap_complete = { version = "4.5.13" }
-console = { version = "0.15.8" }
+console = { version = "0.15.10" }
derive-new = { version = "0.6.0" }
-env_logger = { version = "0.11.5" }
+env_logger = { version = "0.11.6" }
iai-callgrind = { version = "0.12.3" }
iai-callgrind-runner = { version = "0.12.3" }
ignore = { version = "0.4.23" }
@@ -120,14 +120,14 @@ once_cell = { version = "1.20.2" }
paste = { version = "1.0.15" }
proc-macro2 = { version = "1.0.92" }
public-api = { version = "0.37.0" }
-quote = { version = "1.0.37" }
+quote = { version = "1.0.38" }
rayon = { version = "1.10.0" }
regex = { version = "1.11.1" }
-reqwest = { version = "0.12.9", features = ["blocking"] }
-rustdoc-json = { version = "0.9.3" }
+reqwest = { version = "0.12.12", features = ["blocking"] }
+rustdoc-json = { version = "0.9.4" }
semver = { version = "1.0.24", features = ["serde"] }
-serde = { version = "1.0.216", features = ["derive", "rc"] }
-serde_json = { version = "1.0.133", features = ["preserve_order"] }
+serde = { version = "1.0.217", features = ["derive", "rc"] }
+serde_json = { version = "1.0.134", features = ["preserve_order"] }
similar-asserts = { version = "1.6.0" }
smallvec = { version = "1.7.0", features = ["union"] }
stack-graphs = { version = "0.13.0" }
@@ -138,7 +138,7 @@ string-interner = { version = "0.17.0", features = [
] }
strum = { version = "0.26.3" }
strum_macros = { version = "0.26.4" }
-syn = { version = "2.0.90", features = [
+syn = { version = "2.0.93", features = [
"fold",
"full",
"extra-traits",
From 35d89d636665cf32e5f865ccddd0727eaae0c5bc Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 1 Jan 2025 23:19:38 +0000
Subject: [PATCH 3/4] [npm] Bump the non-major-dependencies group with 4
updates (#1209)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Bumps the non-major-dependencies group with 4 updates:
[@changesets/cli](https://github.com/changesets/changesets),
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node),
[cspell](https://github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell)
and [prettier](https://github.com/prettier/prettier).
Updates `@changesets/cli` from 2.27.10 to 2.27.11
Release notes
Sourced from @changesets/cli
's
releases.
@changesets/cli
@2
.27.11
Patch Changes
- Updated dependencies [
f0270f6
]:
@changesets/config
@3
.0.5
@changesets/apply-release-plan
@7
.0.7
@changesets/get-release-plan
@4
.0.6
Commits
Updates `@types/node` from 22.10.0 to 22.10.3
Commits
Updates `cspell` from 8.16.0 to 8.17.1
Release notes
Sourced from cspell's
releases.
v8.17.1
Changes
Fixes
fix: Make sure empty string is not checked. (#6680)
For some strange reason, the Hungarian dictionary ends up with a
forbid on empty string. This would happen when matching against
".
.
v8.17.0
Changes
Features
feat: Support Windows UNC files. (#6671)
feat: Do not spell check random strings (#6615)
Added two new configuration options:
ignoreRandomStrings
- (default true
) tell
the spell checker to ignore strings of random characters.
minRandomLength
- (default 40
) the minimum
length of a string of characters before checking if it is random.
fixes #6573
Fixes
... (truncated)
Changelog
Sourced from cspell's
changelog.
8.17.1 (2024-12-16)
8.17.0 (2024-12-15)
8.16.1 (2024-11-26)
Commits
Updates `prettier` from 3.4.0 to 3.4.2
Release notes
Sourced from prettier's
releases.
3.4.2
🔗 Changelog
3.4.1
🔗 Changelog
Changelog
Sourced from prettier's
changelog.
3.4.2
diff
Treat U+30A0 & U+30FB in Katakana Block as CJK (#16796
by @tats-u
)
Prettier doesn't treat U+30A0 & U+30FB as Japanese. U+30FB is
commonly used in Japanese to represent the delimitation of first and
last names of non-Japanese people or “and”. The following
“C言語・C++・Go・Rust” means “C language & C++ & Go & Rust” in
Japanese.
<!-- Input (--prose-wrap=never) -->
C言
語
・
C++
・
Go
・
Rust
<!-- Prettier 3.4.1 -->
C言語・ C++ ・ Go ・ Rust
<!-- Prettier 3.4.2 -->
C言語・C++・Go・Rust
U+30A0 can be used as the replacement of the -
in
non-Japanese names (e.g. “Saint-Saëns” (Charles Camille Saint-Saëns) can
be represented as “サン゠サーンス” in Japanese), but substituted by ASCII
hyphen (U+002D) or U+FF1D (full width hyphen) in many cases (e.g.
“サン=サーンス” or “サン=サーンス”).
Fix comments print on class methods with decorators (#16891
by @fisker
)
// Input
class A {
@decorator
/**
* The method description
*
*/
async method(foo: Foo, bar: Bar) {
console.log(foo);
}
}
// Prettier 3.4.1
class A {
@decorator
async /**
</tr></table>
... (truncated)
Commits
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore ` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore ` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore ` will
remove the ignore condition of the specified dependency and ignore
conditions
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
crates/infra/cli/package.json | 8 +-
package-lock.json | 884 ++++++++++++++--------------------
2 files changed, 371 insertions(+), 521 deletions(-)
diff --git a/crates/infra/cli/package.json b/crates/infra/cli/package.json
index bc80805dc9..b37d6813c3 100644
--- a/crates/infra/cli/package.json
+++ b/crates/infra/cli/package.json
@@ -4,13 +4,13 @@
"devDependencies": {
"@actions/github": "6.0.0",
"@changesets/changelog-github": "0.5.0",
- "@changesets/cli": "2.27.10",
- "@types/node": "22.10.0",
- "cspell": "8.16.0",
+ "@changesets/cli": "2.27.11",
+ "@types/node": "22.10.3",
+ "cspell": "8.17.1",
"markdown-link-check": "3.12.2",
"markdownlint-cli": "0.43.0",
"prettier-plugin-sh": "0.14.0",
- "prettier": "3.4.0",
+ "prettier": "3.4.2",
"remark-parse": "11.0.0",
"remark-stringify": "11.0.0",
"typescript": "5.7.2",
diff --git a/package-lock.json b/package-lock.json
index d3b6c9284c..b49117c1ea 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -35,12 +35,12 @@
"devDependencies": {
"@actions/github": "6.0.0",
"@changesets/changelog-github": "0.5.0",
- "@changesets/cli": "2.27.10",
- "@types/node": "22.10.0",
- "cspell": "8.16.0",
+ "@changesets/cli": "2.27.11",
+ "@types/node": "22.10.3",
+ "cspell": "8.17.1",
"markdown-link-check": "3.12.2",
"markdownlint-cli": "0.43.0",
- "prettier": "3.4.0",
+ "prettier": "3.4.2",
"prettier-plugin-sh": "0.14.0",
"remark-parse": "11.0.0",
"remark-stringify": "11.0.0",
@@ -577,7 +577,6 @@
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
"integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -646,13 +645,12 @@
"integrity": "sha512-h1qLL0TN5KXk/zagY2BtbZuDX6xYjz4Br9RZXEa0ID4UpiPc0agUMhTdz9r89G4vX5SU/tqBg1A6UNv2+DJ5pg=="
},
"node_modules/@changesets/apply-release-plan": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.6.tgz",
- "integrity": "sha512-TKhVLtiwtQOgMAC0fCJfmv93faiViKSDqr8oMEqrnNs99gtSC1sZh/aEMS9a+dseU1ESZRCK+ofLgGY7o0fw/Q==",
+ "version": "7.0.7",
+ "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.7.tgz",
+ "integrity": "sha512-qnPOcmmmnD0MfMg9DjU1/onORFyRpDXkMMl2IJg9mECY6RnxL3wN0TCCc92b2sXt1jt8DgjAUUsZYGUGTdYIXA==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@changesets/config": "^3.0.4",
+ "@changesets/config": "^3.0.5",
"@changesets/get-version-range-type": "^0.4.0",
"@changesets/git": "^3.0.2",
"@changesets/should-skip-package": "^0.1.1",
@@ -672,7 +670,6 @@
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"dev": true,
- "license": "MIT",
"bin": {
"prettier": "bin-prettier.js"
},
@@ -688,7 +685,6 @@
"resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.5.tgz",
"integrity": "sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@changesets/errors": "^0.2.0",
"@changesets/get-dependents-graph": "^2.1.2",
@@ -719,19 +715,18 @@
}
},
"node_modules/@changesets/cli": {
- "version": "2.27.10",
- "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.10.tgz",
- "integrity": "sha512-PfeXjvs9OfQJV8QSFFHjwHX3QnUL9elPEQ47SgkiwzLgtKGyuikWjrdM+lO9MXzOE22FO9jEGkcs4b+B6D6X0Q==",
+ "version": "2.27.11",
+ "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.11.tgz",
+ "integrity": "sha512-1QislpE+nvJgSZZo9+Lj3Lno5pKBgN46dAV8IVxKJy9wX8AOrs9nn5pYVZuDpoxWJJCALmbfOsHkyxujgetQSg==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@changesets/apply-release-plan": "^7.0.6",
+ "@changesets/apply-release-plan": "^7.0.7",
"@changesets/assemble-release-plan": "^6.0.5",
"@changesets/changelog-git": "^0.2.0",
- "@changesets/config": "^3.0.4",
+ "@changesets/config": "^3.0.5",
"@changesets/errors": "^0.2.0",
"@changesets/get-dependents-graph": "^2.1.2",
- "@changesets/get-release-plan": "^4.0.5",
+ "@changesets/get-release-plan": "^4.0.6",
"@changesets/git": "^3.0.2",
"@changesets/logger": "^0.1.1",
"@changesets/pre": "^2.0.1",
@@ -742,7 +737,7 @@
"@manypkg/get-packages": "^1.1.3",
"ansi-colors": "^4.1.3",
"ci-info": "^3.7.0",
- "enquirer": "^2.3.0",
+ "enquirer": "^2.4.1",
"external-editor": "^3.1.0",
"fs-extra": "^7.0.1",
"mri": "^1.2.0",
@@ -759,11 +754,10 @@
}
},
"node_modules/@changesets/config": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.0.4.tgz",
- "integrity": "sha512-+DiIwtEBpvvv1z30f8bbOsUQGuccnZl9KRKMM/LxUHuDu5oEjmN+bJQ1RIBKNJjfYMQn8RZzoPiX0UgPaLQyXw==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.0.5.tgz",
+ "integrity": "sha512-QyXLSSd10GquX7hY0Mt4yQFMEeqnO5z/XLpbIr4PAkNNoQNKwDyiSrx4yd749WddusH1v3OSiA0NRAYmH/APpQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@changesets/errors": "^0.2.0",
"@changesets/get-dependents-graph": "^2.1.2",
@@ -779,7 +773,6 @@
"resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz",
"integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==",
"dev": true,
- "license": "MIT",
"dependencies": {
"extendable-error": "^0.1.5"
}
@@ -789,7 +782,6 @@
"resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.2.tgz",
"integrity": "sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@changesets/types": "^6.0.0",
"@manypkg/get-packages": "^1.1.3",
@@ -808,14 +800,13 @@
}
},
"node_modules/@changesets/get-release-plan": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.5.tgz",
- "integrity": "sha512-E6wW7JoSMcctdVakut0UB76FrrN3KIeJSXvB+DHMFo99CnC3ZVnNYDCVNClMlqAhYGmLmAj77QfApaI3ca4Fkw==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.6.tgz",
+ "integrity": "sha512-FHRwBkY7Eili04Y5YMOZb0ezQzKikTka4wL753vfUA5COSebt7KThqiuCN9BewE4/qFGgF/5t3AuzXx1/UAY4w==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@changesets/assemble-release-plan": "^6.0.5",
- "@changesets/config": "^3.0.4",
+ "@changesets/config": "^3.0.5",
"@changesets/pre": "^2.0.1",
"@changesets/read": "^0.6.2",
"@changesets/types": "^6.0.0",
@@ -826,15 +817,13 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz",
"integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/@changesets/git": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.2.tgz",
"integrity": "sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@changesets/errors": "^0.2.0",
"@manypkg/get-packages": "^1.1.3",
@@ -848,7 +837,6 @@
"resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz",
"integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"picocolors": "^1.1.0"
}
@@ -858,7 +846,6 @@
"resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.0.tgz",
"integrity": "sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@changesets/types": "^6.0.0",
"js-yaml": "^3.13.1"
@@ -869,7 +856,6 @@
"resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.1.tgz",
"integrity": "sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@changesets/errors": "^0.2.0",
"@changesets/types": "^6.0.0",
@@ -882,7 +868,6 @@
"resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.2.tgz",
"integrity": "sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@changesets/git": "^3.0.2",
"@changesets/logger": "^0.1.1",
@@ -898,7 +883,6 @@
"resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.1.tgz",
"integrity": "sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@changesets/types": "^6.0.0",
"@manypkg/get-packages": "^1.1.3"
@@ -938,18 +922,17 @@
}
},
"node_modules/@cspell/cspell-bundled-dicts": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.16.0.tgz",
- "integrity": "sha512-R0Eqq5kTZnmZ0elih5uY3TWjMqqAeMl7ciU7maUs+m1FNjCEdJXtJ9wrQxNgjmXi0tX8cvahZRO3O558tEz/KA==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.17.1.tgz",
+ "integrity": "sha512-HmkXS5uX4bk/XxsRS4Q+zRvhgRa81ddGiR2/Xfag9MIi5L5UnEJ4g21EpmIlXkMxYrTu2fp69SZFss5NfcFF9Q==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@cspell/dict-ada": "^4.0.5",
"@cspell/dict-al": "^1.0.3",
"@cspell/dict-aws": "^4.0.7",
"@cspell/dict-bash": "^4.1.8",
- "@cspell/dict-companies": "^3.1.7",
- "@cspell/dict-cpp": "^6.0.1",
+ "@cspell/dict-companies": "^3.1.8",
+ "@cspell/dict-cpp": "^6.0.2",
"@cspell/dict-cryptocurrencies": "^5.0.3",
"@cspell/dict-csharp": "^4.0.5",
"@cspell/dict-css": "^4.0.16",
@@ -958,17 +941,17 @@
"@cspell/dict-docker": "^1.1.11",
"@cspell/dict-dotnet": "^5.0.8",
"@cspell/dict-elixir": "^4.0.6",
- "@cspell/dict-en_us": "^4.3.26",
+ "@cspell/dict-en_us": "^4.3.28",
"@cspell/dict-en-common-misspellings": "^2.0.7",
"@cspell/dict-en-gb": "1.1.33",
- "@cspell/dict-filetypes": "^3.0.8",
+ "@cspell/dict-filetypes": "^3.0.9",
"@cspell/dict-flutter": "^1.0.3",
"@cspell/dict-fonts": "^4.0.3",
"@cspell/dict-fsharp": "^1.0.4",
"@cspell/dict-fullstack": "^3.2.3",
- "@cspell/dict-gaming-terms": "^1.0.8",
+ "@cspell/dict-gaming-terms": "^1.0.9",
"@cspell/dict-git": "^3.0.3",
- "@cspell/dict-golang": "^6.0.16",
+ "@cspell/dict-golang": "^6.0.17",
"@cspell/dict-google": "^1.0.4",
"@cspell/dict-haskell": "^4.0.4",
"@cspell/dict-html": "^4.0.10",
@@ -983,16 +966,16 @@
"@cspell/dict-markdown": "^2.0.7",
"@cspell/dict-monkeyc": "^1.0.9",
"@cspell/dict-node": "^5.0.5",
- "@cspell/dict-npm": "^5.1.11",
+ "@cspell/dict-npm": "^5.1.17",
"@cspell/dict-php": "^4.0.13",
"@cspell/dict-powershell": "^5.0.13",
"@cspell/dict-public-licenses": "^2.0.11",
- "@cspell/dict-python": "^4.2.12",
+ "@cspell/dict-python": "^4.2.13",
"@cspell/dict-r": "^2.0.4",
"@cspell/dict-ruby": "^5.0.7",
- "@cspell/dict-rust": "^4.0.9",
+ "@cspell/dict-rust": "^4.0.10",
"@cspell/dict-scala": "^5.0.6",
- "@cspell/dict-software-terms": "^4.1.13",
+ "@cspell/dict-software-terms": "^4.1.19",
"@cspell/dict-sql": "^2.1.8",
"@cspell/dict-svelte": "^1.0.5",
"@cspell/dict-swift": "^2.0.4",
@@ -1005,34 +988,31 @@
}
},
"node_modules/@cspell/cspell-json-reporter": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.16.0.tgz",
- "integrity": "sha512-KLjPK94gA3JNuWy70LeenJ6EL3SFk2ejERKYJ6SVV/cVOKIvVd2qe42yX3/A/DkF2xzuZ2LD4z0sfoqQL1BaqA==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.17.1.tgz",
+ "integrity": "sha512-EV9Xkh42Xw3aORvDZfxusICX91DDbqQpYdGKBdPGuhgxWOUYYZKpLXsHCmDkhruMPo2m5gDh++/OqjLRPZofKQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@cspell/cspell-types": "8.16.0"
+ "@cspell/cspell-types": "8.17.1"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@cspell/cspell-pipe": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-8.16.0.tgz",
- "integrity": "sha512-WoCgrv/mrtwCY4lhc6vEcqN3AQ7lT6K0NW5ShoSo116U2tRaW0unApIYH4Va8u7T9g3wyspFEceQRR1xD9qb9w==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-8.17.1.tgz",
+ "integrity": "sha512-uhC99Ox+OH3COSgShv4fpVHiotR70dNvAOSkzRvKVRzV6IGyFnxHjmyVVPEV0dsqzVLxltwYTqFhwI+UOwm45A==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/@cspell/cspell-resolver": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-8.16.0.tgz",
- "integrity": "sha512-b+99bph43ptkXlQHgPXSkN/jK6LQHy2zL1Fm9up7+x6Yr64bxAzWzoeqJAPtnrPvFuOrFN0jZasZzKBw8CvrrQ==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-8.17.1.tgz",
+ "integrity": "sha512-XEK2ymTdQNgsV3ny60VkKzWskbICl4zNXh/DbxsoRXHqIRg43MXFpTNkEJ7j873EqdX7BU4opQQ+5D4stWWuhQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"global-directory": "^4.0.1"
},
@@ -1041,433 +1021,375 @@
}
},
"node_modules/@cspell/cspell-service-bus": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-8.16.0.tgz",
- "integrity": "sha512-+fn763JKA4EYCOv+1VShFq015UMEBAFRDr+rlCnesgLE0fv9TSFVLsjOfh9/g6GuGQLCRLUqKztwwuueeErstQ==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-8.17.1.tgz",
+ "integrity": "sha512-2sFWQtMEWZ4tdz7bw0bAx4NaV1t0ynGfjpuKWdQppsJFKNb+ZPZZ6Ah1dC13AdRRMZaG194kDRFwzNvRaCgWkQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/@cspell/cspell-types": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-8.16.0.tgz",
- "integrity": "sha512-bGrIK7p4NVsK+QX/CYWmjax+FkzfSIZaIaoiBESGV5gmwgXDVRMJ3IP6tQVAmTtckOYHCmtT5CZgI8zXWr8dHQ==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-8.17.1.tgz",
+ "integrity": "sha512-NJbov7Jp57fh8addoxesjb8atg/APQfssCH5Q9uZuHBN06wEJDgs7fhfE48bU+RBViC9gltblsYZzZZQKzHYKg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/@cspell/dict-ada": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.0.5.tgz",
- "integrity": "sha512-6/RtZ/a+lhFVmrx/B7bfP7rzC4yjEYe8o74EybXcvu4Oue6J4Ey2WSYj96iuodloj1LWrkNCQyX5h4Pmcj0Iag==",
- "dev": true,
- "license": "MIT"
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.0.6.tgz",
+ "integrity": "sha512-1DpA3LeidQS5Wec5ZnrIRtuv/ijUcfcUq8G5hj/3QZT4vTTRXtIaQnfsq7t3XYsRlisYHkVmm2CgsJ/8hKChLw==",
+ "dev": true
},
"node_modules/@cspell/dict-al": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@cspell/dict-al/-/dict-al-1.0.3.tgz",
- "integrity": "sha512-V1HClwlfU/qwSq2Kt+MkqRAsonNu3mxjSCDyGRecdLGIHmh7yeEeaxqRiO/VZ4KP+eVSiSIlbwrb5YNFfxYZbw==",
- "dev": true,
- "license": "MIT"
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-al/-/dict-al-1.0.4.tgz",
+ "integrity": "sha512-W4ppuwhZN6A1genmj9Q4NC8UKy7TrRb7UjvMsuPDen+V8anePTys9a0DpKp3z0S6nlrcZgqYNe9Hw/9k76mkAQ==",
+ "dev": true
},
"node_modules/@cspell/dict-aws": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.7.tgz",
- "integrity": "sha512-PoaPpa2NXtSkhGIMIKhsJUXB6UbtTt6Ao3x9JdU9kn7fRZkwD4RjHDGqulucIOz7KeEX/dNRafap6oK9xHe4RA==",
- "dev": true,
- "license": "MIT"
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.8.tgz",
+ "integrity": "sha512-9gYdKw34dorYbwh+ycUDNQQHfkUTBRKQNriSUXB0L/SA/k1bbFuD7qQxUmSmmH+Q0AjDCJ41OntF7l/Ok1H3ig==",
+ "dev": true
},
"node_modules/@cspell/dict-bash": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.1.8.tgz",
- "integrity": "sha512-I2CM2pTNthQwW069lKcrVxchJGMVQBzru2ygsHCwgidXRnJL/NTjAPOFTxN58Jc1bf7THWghfEDyKX/oyfc0yg==",
- "dev": true,
- "license": "MIT"
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.1.9.tgz",
+ "integrity": "sha512-Gl7tE1dFgtZHUZTpzAA4/HyKE9QXJ1dyDrru98J4LdhTPaoyXW+b8hfr4y7n21zzEqE2zAW4fi3o85IY28uPTQ==",
+ "dev": true
},
"node_modules/@cspell/dict-companies": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.1.7.tgz",
- "integrity": "sha512-ncVs/efuAkP1/tLDhWbXukBjgZ5xOUfe03neHMWsE8zvXXc5+Lw6TX5jaJXZLOoES/f4j4AhRE20jsPCF5pm+A==",
- "dev": true,
- "license": "MIT"
+ "version": "3.1.12",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.1.12.tgz",
+ "integrity": "sha512-99FxBNdLOQc3nVQ663Xh7JqDLbIy/AdqOecQ5bk3HpmXpSkoDvTT7XCUU5nQZvmFBrrQlXFKlRRYjLfTEOUDdA==",
+ "dev": true
},
"node_modules/@cspell/dict-cpp": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-6.0.2.tgz",
- "integrity": "sha512-yw5eejWvY4bAnc6LUA44m4WsFwlmgPt2uMSnO7QViGMBDuoeopMma4z9XYvs4lSjTi8fIJs/A1YDfM9AVzb8eg==",
- "dev": true,
- "license": "MIT"
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-6.0.3.tgz",
+ "integrity": "sha512-OFrVXdxCeGKnon36Pe3yFjBuY4kzzEwWFf3vDz+cJTodZDkjFkBifQeTtt5YfimgF8cfAJZXkBCsxjipAgmAiw==",
+ "dev": true
},
"node_modules/@cspell/dict-cryptocurrencies": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.3.tgz",
- "integrity": "sha512-bl5q+Mk+T3xOZ12+FG37dB30GDxStza49Rmoax95n37MTLksk9wBo1ICOlPJ6PnDUSyeuv4SIVKgRKMKkJJglA==",
- "dev": true,
- "license": "MIT"
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.4.tgz",
+ "integrity": "sha512-6iFu7Abu+4Mgqq08YhTKHfH59mpMpGTwdzDB2Y8bbgiwnGFCeoiSkVkgLn1Kel2++hYcZ8vsAW/MJS9oXxuMag==",
+ "dev": true
},
"node_modules/@cspell/dict-csharp": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.5.tgz",
- "integrity": "sha512-c/sFnNgtRwRJxtC3JHKkyOm+U3/sUrltFeNwml9VsxKBHVmvlg4tk4ar58PdpW9/zTlGUkWi2i85//DN1EsUCA==",
- "dev": true,
- "license": "MIT"
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.6.tgz",
+ "integrity": "sha512-w/+YsqOknjQXmIlWDRmkW+BHBPJZ/XDrfJhZRQnp0wzpPOGml7W0q1iae65P2AFRtTdPKYmvSz7AL5ZRkCnSIw==",
+ "dev": true
},
"node_modules/@cspell/dict-css": {
- "version": "4.0.16",
- "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.16.tgz",
- "integrity": "sha512-70qu7L9z/JR6QLyJPk38fNTKitlIHnfunx0wjpWQUQ8/jGADIhMCrz6hInBjqPNdtGpYm8d1dNFyF8taEkOgrQ==",
- "dev": true,
- "license": "MIT"
+ "version": "4.0.17",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.17.tgz",
+ "integrity": "sha512-2EisRLHk6X/PdicybwlajLGKF5aJf4xnX2uuG5lexuYKt05xV/J/OiBADmi8q9obhxf1nesrMQbqAt+6CsHo/w==",
+ "dev": true
},
"node_modules/@cspell/dict-dart": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.2.4.tgz",
- "integrity": "sha512-of/cVuUIZZK/+iqefGln8G3bVpfyN6ZtH+LyLkHMoR5tEj+2vtilGNk9ngwyR8L4lEqbKuzSkOxgfVjsXf5PsQ==",
- "dev": true,
- "license": "MIT"
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.2.5.tgz",
+ "integrity": "sha512-j/J99MH4NV2Klok0XMqnHxGl2lkewBcYjGYWdBKvVSbLXyA4oOaL+vCZR8Nmwf+lHInJFN8nkMU2k7TnC0MgUw==",
+ "dev": true
},
"node_modules/@cspell/dict-data-science": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.5.tgz",
- "integrity": "sha512-nNSILXmhSJox9/QoXICPQgm8q5PbiSQP4afpbkBqPi/u/b3K9MbNH5HvOOa6230gxcGdbZ9Argl2hY/U8siBlg==",
- "dev": true,
- "license": "MIT"
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.6.tgz",
+ "integrity": "sha512-gOYKZOg358yhnnQfr1/f232REmjeIymXUHJdrLEMPirluv2rzMWvEBBazqRVQ++jMUNg9IduVI0v096ZWMDekA==",
+ "dev": true
},
"node_modules/@cspell/dict-django": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.3.tgz",
- "integrity": "sha512-yBspeL3roJlO0a1vKKNaWABURuHdHZ9b1L8d3AukX0AsBy9snSggc8xCavPmSzNfeMDXbH+1lgQiYBd3IW03fg==",
- "dev": true,
- "license": "MIT"
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.4.tgz",
+ "integrity": "sha512-fX38eUoPvytZ/2GA+g4bbdUtCMGNFSLbdJJPKX2vbewIQGfgSFJKY56vvcHJKAvw7FopjvgyS/98Ta9WN1gckg==",
+ "dev": true
},
"node_modules/@cspell/dict-docker": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.11.tgz",
- "integrity": "sha512-s0Yhb16/R+UT1y727ekbR/itWQF3Qz275DR1ahOa66wYtPjHUXmhM3B/LT3aPaX+hD6AWmK23v57SuyfYHUjsw==",
- "dev": true,
- "license": "MIT"
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.12.tgz",
+ "integrity": "sha512-6d25ZPBnYZaT9D9An/x6g/4mk542R8bR3ipnby3QFCxnfdd6xaWiTcwDPsCgwN2aQZIQ1jX/fil9KmBEqIK/qA==",
+ "dev": true
},
"node_modules/@cspell/dict-dotnet": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.8.tgz",
- "integrity": "sha512-MD8CmMgMEdJAIPl2Py3iqrx3B708MbCIXAuOeZ0Mzzb8YmLmiisY7QEYSZPg08D7xuwARycP0Ki+bb0GAkFSqg==",
- "dev": true,
- "license": "MIT"
+ "version": "5.0.9",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.9.tgz",
+ "integrity": "sha512-JGD6RJW5sHtO5lfiJl11a5DpPN6eKSz5M1YBa1I76j4dDOIqgZB6rQexlDlK1DH9B06X4GdDQwdBfnpAB0r2uQ==",
+ "dev": true
},
"node_modules/@cspell/dict-elixir": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.6.tgz",
- "integrity": "sha512-TfqSTxMHZ2jhiqnXlVKM0bUADtCvwKQv2XZL/DI0rx3doG8mEMS8SGPOmiyyGkHpR/pGOq18AFH3BEm4lViHIw==",
- "dev": true,
- "license": "MIT"
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.7.tgz",
+ "integrity": "sha512-MAUqlMw73mgtSdxvbAvyRlvc3bYnrDqXQrx5K9SwW8F7fRYf9V4vWYFULh+UWwwkqkhX9w03ZqFYRTdkFku6uA==",
+ "dev": true
},
"node_modules/@cspell/dict-en_us": {
- "version": "4.3.27",
- "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.3.27.tgz",
- "integrity": "sha512-7JYHahRWpi0VykWFTSM03KL/0fs6YtYfpOaTAg4N/d0wB2GfwVG/FJ/SBCjD4LBc6Rx9dzdo95Hs4BB8GPQbOA==",
- "dev": true,
- "license": "MIT"
+ "version": "4.3.28",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.3.28.tgz",
+ "integrity": "sha512-BN1PME7cOl7DXRQJ92pEd1f0Xk5sqjcDfThDGkKcsgwbSOY7KnTc/czBW6Pr3WXIchIm6cT12KEfjNqx7U7Rrw==",
+ "dev": true
},
"node_modules/@cspell/dict-en-common-misspellings": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.7.tgz",
- "integrity": "sha512-qNFo3G4wyabcwnM+hDrMYKN9vNVg/k9QkhqSlSst6pULjdvPyPs1mqz1689xO/v9t8e6sR4IKc3CgUXDMTYOpA==",
- "dev": true,
- "license": "CC BY-SA 4.0"
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.8.tgz",
+ "integrity": "sha512-l1u/pDjwrPyWwBd1hCkZhdsK8yLbLFPD2xWz+1tFFI7WaV9ckDZoF3woRc/0wFGRy53yrfSAVuwhoYOQnHe/fA==",
+ "dev": true
},
"node_modules/@cspell/dict-en-gb": {
"version": "1.1.33",
"resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz",
"integrity": "sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/@cspell/dict-filetypes": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.8.tgz",
- "integrity": "sha512-D3N8sm/iptzfVwsib/jvpX+K/++rM8SRpLDFUaM4jxm8EyGmSIYRbKZvdIv5BkAWmMlTWoRqlLn7Yb1b11jKJg==",
- "dev": true,
- "license": "MIT"
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.10.tgz",
+ "integrity": "sha512-JEN3627joBVtpa1yfkdN9vz1Z129PoKGHBKjXCEziJvf2Zt1LeULWYYYg/O6pzRR4yzRa5YbXDTuyrN7vX7DFg==",
+ "dev": true
},
"node_modules/@cspell/dict-flutter": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@cspell/dict-flutter/-/dict-flutter-1.0.3.tgz",
- "integrity": "sha512-52C9aUEU22ptpgYh6gQyIdA4MP6NPwzbEqndfgPh3Sra191/kgs7CVqXiO1qbtZa9gnYHUoVApkoxRE7mrXHfg==",
- "dev": true,
- "license": "MIT"
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-flutter/-/dict-flutter-1.0.4.tgz",
+ "integrity": "sha512-XlWLCUsI9m2rKJ5TqYcDucajzQOqa7Hy8dhHaRQEyWic6oYvikpA1KtXsi8JD6JaiqfhejZZ6vNsQm1//6iSAg==",
+ "dev": true
},
"node_modules/@cspell/dict-fonts": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.3.tgz",
- "integrity": "sha512-sPd17kV5qgYXLteuHFPn5mbp/oCHKgitNfsZLFC3W2fWEgZlhg4hK+UGig3KzrYhhvQ8wBnmZrAQm0TFKCKzsA==",
- "dev": true,
- "license": "MIT"
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.4.tgz",
+ "integrity": "sha512-cHFho4hjojBcHl6qxidl9CvUb492IuSk7xIf2G2wJzcHwGaCFa2o3gRcxmIg1j62guetAeDDFELizDaJlVRIOg==",
+ "dev": true
},
"node_modules/@cspell/dict-fsharp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@cspell/dict-fsharp/-/dict-fsharp-1.0.4.tgz",
- "integrity": "sha512-G5wk0o1qyHUNi9nVgdE1h5wl5ylq7pcBjX8vhjHcO4XBq20D5eMoXjwqMo/+szKAqzJ+WV3BgAL50akLKrT9Rw==",
- "dev": true,
- "license": "MIT"
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-fsharp/-/dict-fsharp-1.0.5.tgz",
+ "integrity": "sha512-6SsdHOtUsTDZ50wjK4FcvIjPiwBSDU9M/+zmUWpFfT5k5d5Ei80n4HGisFtuFdtmoLgz2F/xNnVvhsA2MWJv+w==",
+ "dev": true
},
"node_modules/@cspell/dict-fullstack": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.3.tgz",
"integrity": "sha512-62PbndIyQPH11mAv0PyiyT0vbwD0AXEocPpHlCHzfb5v9SspzCCbzQ/LIBiFmyRa+q5LMW35CnSVu6OXdT+LKg==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/@cspell/dict-gaming-terms": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.8.tgz",
- "integrity": "sha512-7OL0zTl93WFWhhtpXFrtm9uZXItC3ncAs8d0iQDMMFVNU1rBr6raBNxJskxE5wx2Ant12fgI66ZGVagXfN+yfA==",
- "dev": true,
- "license": "MIT"
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.10.tgz",
+ "integrity": "sha512-LJBUSg2ErWi5+QQysFKFwRvq09zAswteIKdAM/g06NpSiPT+SoIeRNKnnASmvuQQSFS427EwgKKtJ3723n2SFQ==",
+ "dev": true
},
"node_modules/@cspell/dict-git": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.0.3.tgz",
- "integrity": "sha512-LSxB+psZ0qoj83GkyjeEH/ZViyVsGEF/A6BAo8Nqc0w0HjD2qX/QR4sfA6JHUgQ3Yi/ccxdK7xNIo67L2ScW5A==",
- "dev": true,
- "license": "MIT"
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.0.4.tgz",
+ "integrity": "sha512-C44M+m56rYn6QCsLbiKiedyPTMZxlDdEYAsPwwlL5bhMDDzXZ3Ic8OCQIhMbiunhCOJJT+er4URmOmM+sllnjg==",
+ "dev": true
},
"node_modules/@cspell/dict-golang": {
- "version": "6.0.17",
- "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.17.tgz",
- "integrity": "sha512-uDDLEJ/cHdLiqPw4+5BnmIo2i/TSR+uDvYd6JlBjTmjBKpOCyvUgYRztH7nv5e7virsN5WDiUWah4/ATQGz4Pw==",
- "dev": true,
- "license": "MIT"
+ "version": "6.0.18",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.18.tgz",
+ "integrity": "sha512-Mt+7NwfodDwUk7423DdaQa0YaA+4UoV3XSxQwZioqjpFBCuxfvvv4l80MxCTAAbK6duGj0uHbGTwpv8fyKYPKg==",
+ "dev": true
},
"node_modules/@cspell/dict-google": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@cspell/dict-google/-/dict-google-1.0.4.tgz",
- "integrity": "sha512-JThUT9eiguCja1mHHLwYESgxkhk17Gv7P3b1S7ZJzXw86QyVHPrbpVoMpozHk0C9o+Ym764B7gZGKmw9uMGduQ==",
- "dev": true,
- "license": "MIT"
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-google/-/dict-google-1.0.5.tgz",
+ "integrity": "sha512-KNrzfUsoFat94slWzo36g601sIGz6KtE4kBMM0gpqwFLK/MXRyaW65IL4SwysY0PEhuRzg9spLLMnUXuVcY2hQ==",
+ "dev": true
},
"node_modules/@cspell/dict-haskell": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.4.tgz",
- "integrity": "sha512-EwQsedEEnND/vY6tqRfg9y7tsnZdxNqOxLXSXTsFA6JRhUlr8Qs88iUUAfsUzWc4nNmmzQH2UbtT25ooG9x4nA==",
- "dev": true,
- "license": "MIT"
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.5.tgz",
+ "integrity": "sha512-s4BG/4tlj2pPM9Ha7IZYMhUujXDnI0Eq1+38UTTCpatYLbQqDwRFf2KNPLRqkroU+a44yTUAe0rkkKbwy4yRtQ==",
+ "dev": true
},
"node_modules/@cspell/dict-html": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.10.tgz",
- "integrity": "sha512-I9uRAcdtHbh0wEtYZlgF0TTcgH0xaw1B54G2CW+tx4vHUwlde/+JBOfIzird4+WcMv4smZOfw+qHf7puFUbI5g==",
- "dev": true,
- "license": "MIT"
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.11.tgz",
+ "integrity": "sha512-QR3b/PB972SRQ2xICR1Nw/M44IJ6rjypwzA4jn+GH8ydjAX9acFNfc+hLZVyNe0FqsE90Gw3evLCOIF0vy1vQw==",
+ "dev": true
},
"node_modules/@cspell/dict-html-symbol-entities": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.3.tgz",
"integrity": "sha512-aABXX7dMLNFdSE8aY844X4+hvfK7977sOWgZXo4MTGAmOzR8524fjbJPswIBK7GaD3+SgFZ2yP2o0CFvXDGF+A==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/@cspell/dict-java": {
- "version": "5.0.10",
- "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.10.tgz",
- "integrity": "sha512-pVNcOnmoGiNL8GSVq4WbX/Vs2FGS0Nej+1aEeGuUY9CU14X8yAVCG+oih5ZoLt1jaR8YfR8byUF8wdp4qG4XIw==",
- "dev": true,
- "license": "MIT"
+ "version": "5.0.11",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.11.tgz",
+ "integrity": "sha512-T4t/1JqeH33Raa/QK/eQe26FE17eUCtWu+JsYcTLkQTci2dk1DfcIKo8YVHvZXBnuM43ATns9Xs0s+AlqDeH7w==",
+ "dev": true
},
"node_modules/@cspell/dict-julia": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.0.4.tgz",
- "integrity": "sha512-bFVgNX35MD3kZRbXbJVzdnN7OuEqmQXGpdOi9jzB40TSgBTlJWA4nxeAKV4CPCZxNRUGnLH0p05T/AD7Aom9/w==",
- "dev": true,
- "license": "MIT"
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.0.5.tgz",
+ "integrity": "sha512-rMC9OC8POmGw9pN96ByZJaY0YGtzSh64AtuJu4uFcuooF0MGmtXwiAhazRC5kPK5XMS+pKMQql/ItTyKbYh1yg==",
+ "dev": true
},
"node_modules/@cspell/dict-k8s": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.9.tgz",
- "integrity": "sha512-Q7GELSQIzo+BERl2ya/nBEnZeQC+zJP19SN1pI6gqDYraM51uYJacbbcWLYYO2Y+5joDjNt/sd/lJtLaQwoSlA==",
- "dev": true,
- "license": "MIT"
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.10.tgz",
+ "integrity": "sha512-313haTrX9prep1yWO7N6Xw4D6tvUJ0Xsx+YhCP+5YrrcIKoEw5Rtlg8R4PPzLqe6zibw6aJ+Eqq+y76Vx5BZkw==",
+ "dev": true
},
"node_modules/@cspell/dict-latex": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-4.0.3.tgz",
"integrity": "sha512-2KXBt9fSpymYHxHfvhUpjUFyzrmN4c4P8mwIzweLyvqntBT3k0YGZJSriOdjfUjwSygrfEwiuPI1EMrvgrOMJw==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/@cspell/dict-lorem-ipsum": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.3.tgz",
- "integrity": "sha512-WFpDi/PDYHXft6p0eCXuYnn7mzMEQLVeqpO+wHSUd+kz5ADusZ4cpslAA4wUZJstF1/1kMCQCZM6HLZic9bT8A==",
- "dev": true,
- "license": "MIT"
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.4.tgz",
+ "integrity": "sha512-+4f7vtY4dp2b9N5fn0za/UR0kwFq2zDtA62JCbWHbpjvO9wukkbl4rZg4YudHbBgkl73HRnXFgCiwNhdIA1JPw==",
+ "dev": true
},
"node_modules/@cspell/dict-lua": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.6.tgz",
- "integrity": "sha512-Jwvh1jmAd9b+SP9e1GkS2ACbqKKRo9E1f9GdjF/ijmooZuHU0hPyqvnhZzUAxO1egbnNjxS/J2T6iUtjAUK2KQ==",
- "dev": true,
- "license": "MIT"
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.7.tgz",
+ "integrity": "sha512-Wbr7YSQw+cLHhTYTKV6cAljgMgcY+EUAxVIZW3ljKswEe4OLxnVJ7lPqZF5JKjlXdgCjbPSimsHqyAbC5pQN/Q==",
+ "dev": true
},
"node_modules/@cspell/dict-makefile": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@cspell/dict-makefile/-/dict-makefile-1.0.3.tgz",
- "integrity": "sha512-R3U0DSpvTs6qdqfyBATnePj9Q/pypkje0Nj26mQJ8TOBQutCRAJbr2ZFAeDjgRx5EAJU/+8txiyVF97fbVRViw==",
- "dev": true,
- "license": "MIT"
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-makefile/-/dict-makefile-1.0.4.tgz",
+ "integrity": "sha512-E4hG/c0ekPqUBvlkrVvzSoAA+SsDA9bLi4xSV3AXHTVru7Y2bVVGMPtpfF+fI3zTkww/jwinprcU1LSohI3ylw==",
+ "dev": true
},
"node_modules/@cspell/dict-markdown": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.7.tgz",
- "integrity": "sha512-F9SGsSOokFn976DV4u/1eL4FtKQDSgJHSZ3+haPRU5ki6OEqojxKa8hhj4AUrtNFpmBaJx/WJ4YaEzWqG7hgqg==",
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.8.tgz",
+ "integrity": "sha512-GCzfae+PLw9MjdgOO0OB67zguNfhiLnaZX1glCNJ6G1ZWqfeC9eBOxrAR3BkFXoBY0cvDSjIP037QXFEfCgeTg==",
"dev": true,
- "license": "MIT",
"peerDependencies": {
- "@cspell/dict-css": "^4.0.16",
- "@cspell/dict-html": "^4.0.10",
+ "@cspell/dict-css": "^4.0.17",
+ "@cspell/dict-html": "^4.0.11",
"@cspell/dict-html-symbol-entities": "^4.0.3",
- "@cspell/dict-typescript": "^3.1.11"
+ "@cspell/dict-typescript": "^3.1.12"
}
},
"node_modules/@cspell/dict-monkeyc": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.9.tgz",
- "integrity": "sha512-Jvf6g5xlB4+za3ThvenYKREXTEgzx5gMUSzrAxIiPleVG4hmRb/GBSoSjtkGaibN3XxGx5x809gSTYCA/IHCpA==",
- "dev": true,
- "license": "MIT"
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.10.tgz",
+ "integrity": "sha512-7RTGyKsTIIVqzbvOtAu6Z/lwwxjGRtY5RkKPlXKHEoEAgIXwfDxb5EkVwzGQwQr8hF/D3HrdYbRT8MFBfsueZw==",
+ "dev": true
},
"node_modules/@cspell/dict-node": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.5.tgz",
- "integrity": "sha512-7NbCS2E8ZZRZwlLrh2sA0vAk9n1kcTUiRp/Nia8YvKaItGXLfxYqD2rMQ3HpB1kEutal6hQLVic3N2Yi1X7AaA==",
- "dev": true,
- "license": "MIT"
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.6.tgz",
+ "integrity": "sha512-CEbhPCpxGvRNByGolSBTrXXW2rJA4bGqZuTx1KKO85mwR6aadeOmUE7xf/8jiCkXSy+qvr9aJeh+jlfXcsrziQ==",
+ "dev": true
},
"node_modules/@cspell/dict-npm": {
- "version": "5.1.13",
- "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.1.13.tgz",
- "integrity": "sha512-7S1Pwq16M4sqvv/op7iHErc6Diz+DXsBYRMS0dDj6HUS44VXMvgejXa3RMd5jwBmcHzkInFm3DW1eb2exBs0cg==",
- "dev": true,
- "license": "MIT"
+ "version": "5.1.21",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.1.21.tgz",
+ "integrity": "sha512-AHqgbnBPwdMUF6jV/vyf5lz1+9MpmQn8h2E/Px0jHYFri4VTZ5TNBa40NaTNC/L/U/ggbVQTSoBnqZ6rLFwGCg==",
+ "dev": true
},
"node_modules/@cspell/dict-php": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.13.tgz",
- "integrity": "sha512-P6sREMZkhElzz/HhXAjahnICYIqB/HSGp1EhZh+Y6IhvC15AzgtDP8B8VYCIsQof6rPF1SQrFwunxOv8H1e2eg==",
- "dev": true,
- "license": "MIT"
+ "version": "4.0.14",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.14.tgz",
+ "integrity": "sha512-7zur8pyncYZglxNmqsRycOZ6inpDoVd4yFfz1pQRe5xaRWMiK3Km4n0/X/1YMWhh3e3Sl/fQg5Axb2hlN68t1g==",
+ "dev": true
},
"node_modules/@cspell/dict-powershell": {
- "version": "5.0.13",
- "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.13.tgz",
- "integrity": "sha512-0qdj0XZIPmb77nRTynKidRJKTU0Fl+10jyLbAhFTuBWKMypVY06EaYFnwhsgsws/7nNX8MTEQuewbl9bWFAbsg==",
- "dev": true,
- "license": "MIT"
+ "version": "5.0.14",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.14.tgz",
+ "integrity": "sha512-ktjjvtkIUIYmj/SoGBYbr3/+CsRGNXGpvVANrY0wlm/IoGlGywhoTUDYN0IsGwI2b8Vktx3DZmQkfb3Wo38jBA==",
+ "dev": true
},
"node_modules/@cspell/dict-public-licenses": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.11.tgz",
- "integrity": "sha512-rR5KjRUSnVKdfs5G+gJ4oIvQvm8+NJ6cHWY2N+GE69/FSGWDOPHxulCzeGnQU/c6WWZMSimG9o49i9r//lUQyA==",
- "dev": true,
- "license": "MIT"
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.12.tgz",
+ "integrity": "sha512-obreJMVbz8ZrXyc60PcS/B2FwXaO3AWPO2x50zrI/n4UDuBr/UdPb6M1q++6c08n+151I35GEx52xRFiToSg4g==",
+ "dev": true
},
"node_modules/@cspell/dict-python": {
- "version": "4.2.12",
- "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.12.tgz",
- "integrity": "sha512-U25eOFu+RE0aEcF2AsxZmq3Lic7y9zspJ9SzjrC0mfJz+yr3YmSCw4E0blMD3mZoNcf7H/vMshuKIY5AY36U+Q==",
+ "version": "4.2.14",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.14.tgz",
+ "integrity": "sha512-NZ/rsTH5gqTlEwbSg0vn5b1TsyzrUvA6ykwCVCwsVDdlQAS82cyDsF9JqHp8S4d6PFykmkfSxtAXYyOUr0KCbg==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@cspell/dict-data-science": "^2.0.5"
+ "@cspell/dict-data-science": "^2.0.6"
}
},
"node_modules/@cspell/dict-r": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.0.4.tgz",
- "integrity": "sha512-cBpRsE/U0d9BRhiNRMLMH1PpWgw+N+1A2jumgt1if9nBGmQw4MUpg2u9I0xlFVhstTIdzXiLXMxP45cABuiUeQ==",
- "dev": true,
- "license": "MIT"
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.0.5.tgz",
+ "integrity": "sha512-CpZvA/6Ps/vCaR5c+2tL1dGU7ZlIFMp+lUamamHGG1ZIc0+j+16Tb1+9oksEf7k8LCI/F5Io4uIJ+0NezaY8Rg==",
+ "dev": true
},
"node_modules/@cspell/dict-ruby": {
"version": "5.0.7",
"resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.7.tgz",
"integrity": "sha512-4/d0hcoPzi5Alk0FmcyqlzFW9lQnZh9j07MJzPcyVO62nYJJAGKaPZL2o4qHeCS/od/ctJC5AHRdoUm0ktsw6Q==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/@cspell/dict-rust": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.10.tgz",
- "integrity": "sha512-6o5C8566VGTTctgcwfF3Iy7314W0oMlFFSQOadQ0OEdJ9Z9ERX/PDimrzP3LGuOrvhtEFoK8pj+BLnunNwRNrw==",
- "dev": true,
- "license": "MIT"
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.11.tgz",
+ "integrity": "sha512-OGWDEEzm8HlkSmtD8fV3pEcO2XBpzG2XYjgMCJCRwb2gRKvR+XIm6Dlhs04N/K2kU+iH8bvrqNpM8fS/BFl0uw==",
+ "dev": true
},
"node_modules/@cspell/dict-scala": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.6.tgz",
- "integrity": "sha512-tl0YWAfjUVb4LyyE4JIMVE8DlLzb1ecHRmIWc4eT6nkyDqQgHKzdHsnusxFEFMVLIQomgSg0Zz6hJ5S1E4W4ww==",
- "dev": true,
- "license": "MIT"
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.7.tgz",
+ "integrity": "sha512-yatpSDW/GwulzO3t7hB5peoWwzo+Y3qTc0pO24Jf6f88jsEeKmDeKkfgPbYuCgbE4jisGR4vs4+jfQZDIYmXPA==",
+ "dev": true
},
"node_modules/@cspell/dict-software-terms": {
- "version": "4.1.17",
- "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-4.1.17.tgz",
- "integrity": "sha512-QORIk1R5DV8oOQ+oAlUWE7UomaJwUucqu2srrc2+PmkoI6R1fJwwg2uHCPBWlIb4PGDNEdXLv9BAD13H+0wytQ==",
- "dev": true,
- "license": "MIT"
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-4.2.2.tgz",
+ "integrity": "sha512-cgteXRzx2W/Ug7QSdFJrVxLES7krrZEjZ9J6sXRWOsVYFpgu2Gup8NKmjKOZ8NTnCjHQFrMnbmKdv56q9Kwixw==",
+ "dev": true
},
"node_modules/@cspell/dict-sql": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.1.8.tgz",
- "integrity": "sha512-dJRE4JV1qmXTbbGm6WIcg1knmR6K5RXnQxF4XHs5HA3LAjc/zf77F95i5LC+guOGppVF6Hdl66S2UyxT+SAF3A==",
- "dev": true,
- "license": "MIT"
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.1.9.tgz",
+ "integrity": "sha512-dyVtWGUs79SihmxzoXXOpA2mRipQhzZOy5mrRTZvMp3HE7Y5vM1ag/Di8+QCtjYD6l7MjVjp0CxkKp1U7PBpbw==",
+ "dev": true
},
"node_modules/@cspell/dict-svelte": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.5.tgz",
- "integrity": "sha512-sseHlcXOqWE4Ner9sg8KsjxwSJ2yssoJNqFHR9liWVbDV+m7kBiUtn2EB690TihzVsEmDr/0Yxrbb5Bniz70mA==",
- "dev": true,
- "license": "MIT"
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.6.tgz",
+ "integrity": "sha512-8LAJHSBdwHCoKCSy72PXXzz7ulGROD0rP1CQ0StOqXOOlTUeSFaJJlxNYjlONgd2c62XBQiN2wgLhtPN+1Zv7Q==",
+ "dev": true
},
"node_modules/@cspell/dict-swift": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.4.tgz",
- "integrity": "sha512-CsFF0IFAbRtYNg0yZcdaYbADF5F3DsM8C4wHnZefQy8YcHP/qjAF/GdGfBFBLx+XSthYuBlo2b2XQVdz3cJZBw==",
- "dev": true,
- "license": "MIT"
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.5.tgz",
+ "integrity": "sha512-3lGzDCwUmnrfckv3Q4eVSW3sK3cHqqHlPprFJZD4nAqt23ot7fic5ALR7J4joHpvDz36nHX34TgcbZNNZOC/JA==",
+ "dev": true
},
"node_modules/@cspell/dict-terraform": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.0.6.tgz",
- "integrity": "sha512-Sqm5vGbXuI9hCFcr4w6xWf4Y25J9SdleE/IqfM6RySPnk8lISEmVdax4k6+Kinv9qaxyvnIbUUN4WFLWcBPQAg==",
- "dev": true,
- "license": "MIT"
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.0.8.tgz",
+ "integrity": "sha512-YR2v2iDtuzEIwOWAlV9V8pdnrIQud6wHQOhuk3oqR3PS0rkAd6dkWrS0Ce2gbZY7AHHxQ2jvJ66pOjAdIDXbtA==",
+ "dev": true
},
"node_modules/@cspell/dict-typescript": {
- "version": "3.1.11",
- "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.1.11.tgz",
- "integrity": "sha512-FwvK5sKbwrVpdw0e9+1lVTl8FPoHYvfHRuQRQz2Ql5XkC0gwPPkpoyD1zYImjIyZRoYXk3yp9j8ss4iz7A7zoQ==",
- "dev": true,
- "license": "MIT"
+ "version": "3.1.12",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.1.12.tgz",
+ "integrity": "sha512-gQxryTuRrRW3whM7gASetOTcPVsDGxfVn/MoSX507rcsFdZTnX18+M6D4iE0sUtranF1MWscGPIm6J2gfL3Zxw==",
+ "dev": true
},
"node_modules/@cspell/dict-vue": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.3.tgz",
- "integrity": "sha512-akmYbrgAGumqk1xXALtDJcEcOMYBYMnkjpmGzH13Ozhq1mkPF4VgllFQlm1xYde+BUKNnzMgPEzxrL2qZllgYA==",
- "dev": true,
- "license": "MIT"
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.4.tgz",
+ "integrity": "sha512-0dPtI0lwHcAgSiQFx8CzvqjdoXROcH+1LyqgROCpBgppommWpVhbQ0eubnKotFEXgpUCONVkeZJ6Ql8NbTEu+w==",
+ "dev": true
},
"node_modules/@cspell/dynamic-import": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-8.16.0.tgz",
- "integrity": "sha512-FH+B5y71qfunagXiLSJhXP9h/Vwb1Z8Cc/hLmliGekw/Y8BuYknL86tMg9grXBYNmM0kifIv6ZesQl8Km/p/rA==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-8.17.1.tgz",
+ "integrity": "sha512-XQtr2olYOtqbg49E+8SISd6I5DzfxmsKINDn0ZgaTFeLalnNdF3ewDU4gOEbApIzGffRa1mW9t19MsiVrznSDw==",
"dev": true,
- "license": "MIT",
"dependencies": {
+ "@cspell/url": "8.17.1",
"import-meta-resolve": "^4.1.0"
},
"engines": {
@@ -1475,31 +1397,28 @@
}
},
"node_modules/@cspell/filetypes": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-8.16.0.tgz",
- "integrity": "sha512-u2Ub0uSwXFPJFvXhAO/0FZBj3sMr4CeYCiQwTUsdFRkRMFpbTc7Vf+a+aC2vIj6WcaWrYXrJy3NZF/yjqF6SGw==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-8.17.1.tgz",
+ "integrity": "sha512-AxYw6j7EPYtDFAFjwybjFpMc9waXQzurfBXmEVfQ5RQRlbylujLZWwR6GnMqofeNg4oGDUpEjcAZFrgdkvMQlA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/@cspell/strong-weak-map": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-8.16.0.tgz",
- "integrity": "sha512-R6N12wEIQpBk2uyni/FU1SFSIjP0uql7ynXVcF1ob8/JJeRoikssydi9Xq5J6ghMw+X50u35mFvg9BgWKz0d+g==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-8.17.1.tgz",
+ "integrity": "sha512-8cY3vLAKdt5gQEMM3Gr57BuQ8sun2NjYNh9qTdrctC1S9gNC7XzFghTYAfHSWR4VrOUcMFLO/izMdsc1KFvFOA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/@cspell/url": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/@cspell/url/-/url-8.16.0.tgz",
- "integrity": "sha512-zW+6hAieD/FjysfjY4mVv7iHWWasBP3ldj6L+xy2p4Kuax1nug7uuJqMHlAVude/OywNwENG0rYaP/P9Pg4O+w==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/@cspell/url/-/url-8.17.1.tgz",
+ "integrity": "sha512-LMvReIndW1ckvemElfDgTt282fb2C3C/ZXfsm0pJsTV5ZmtdelCHwzmgSBmY5fDr7D66XDp8EurotSE0K6BTvw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=18.0"
}
@@ -2350,7 +2269,6 @@
"resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz",
"integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.5.5",
"@types/node": "^12.7.1",
@@ -2362,15 +2280,13 @@
"version": "12.20.55",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz",
"integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/@manypkg/find-root/node_modules/fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"dev": true,
- "license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
@@ -2385,7 +2301,6 @@
"resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz",
"integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.5.5",
"@changesets/types": "^4.0.1",
@@ -2399,15 +2314,13 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz",
"integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/@manypkg/get-packages/node_modules/fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"dev": true,
- "license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
@@ -2422,7 +2335,6 @@
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -2436,7 +2348,6 @@
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">= 8"
}
@@ -2446,7 +2357,6 @@
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -2781,11 +2691,10 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "22.10.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.0.tgz",
- "integrity": "sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA==",
+ "version": "22.10.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.3.tgz",
+ "integrity": "sha512-DifAyw4BkrufCILvD3ucnuN8eydUfc/C1GlyrnI+LK6543w5/L3VeVgf05o3B4fqSXP1dKYLOZsKfutpxPzZrw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"undici-types": "~6.20.0"
}
@@ -2927,15 +2836,13 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz",
"integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/array-union": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -3180,7 +3087,6 @@
"resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz",
"integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==",
"dev": true,
- "license": "MIT",
"dependencies": {
"is-windows": "^1.0.0"
},
@@ -3443,7 +3349,6 @@
"resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz",
"integrity": "sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"parent-module": "^2.0.0",
"resolve-from": "^5.0.0"
@@ -3514,7 +3419,6 @@
"resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz",
"integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"array-timsort": "^1.0.3",
"core-util-is": "^1.0.3",
@@ -3542,8 +3446,7 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/create-jest": {
"version": "29.7.0",
@@ -3658,25 +3561,24 @@
}
},
"node_modules/cspell": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.16.0.tgz",
- "integrity": "sha512-U6Up/4nODE+Ca+zqwZXTgBioGuF2JQHLEUIuoRJkJzAZkIBYDqrMXM+zdSL9E39+xb9jAtr9kPAYJf1Eybgi9g==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.17.1.tgz",
+ "integrity": "sha512-D0lw8XTXrTycNzOn5DkfPJNUT00X53OgvFDm+0SzhBr1r+na8LEh3CnQ6zKYVU0fL0x8vU82vs4jmGjDho9mPg==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@cspell/cspell-json-reporter": "8.16.0",
- "@cspell/cspell-pipe": "8.16.0",
- "@cspell/cspell-types": "8.16.0",
- "@cspell/dynamic-import": "8.16.0",
- "@cspell/url": "8.16.0",
+ "@cspell/cspell-json-reporter": "8.17.1",
+ "@cspell/cspell-pipe": "8.17.1",
+ "@cspell/cspell-types": "8.17.1",
+ "@cspell/dynamic-import": "8.17.1",
+ "@cspell/url": "8.17.1",
"chalk": "^5.3.0",
"chalk-template": "^1.1.0",
"commander": "^12.1.0",
- "cspell-dictionary": "8.16.0",
- "cspell-gitignore": "8.16.0",
- "cspell-glob": "8.16.0",
- "cspell-io": "8.16.0",
- "cspell-lib": "8.16.0",
+ "cspell-dictionary": "8.17.1",
+ "cspell-gitignore": "8.17.1",
+ "cspell-glob": "8.17.1",
+ "cspell-io": "8.17.1",
+ "cspell-lib": "8.17.1",
"fast-json-stable-stringify": "^2.1.0",
"file-entry-cache": "^9.1.0",
"get-stdin": "^9.0.0",
@@ -3695,30 +3597,28 @@
}
},
"node_modules/cspell-config-lib": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.16.0.tgz",
- "integrity": "sha512-PGT6ohLtIYXYLIm+R5hTcTrF0dzj8e7WAUJSJe5WlV/7lrwVdwgWaliLcXtSSPmfxgczr6sndX9TMJ2IEmPrmg==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.17.1.tgz",
+ "integrity": "sha512-x1S7QWprgUcwuwiJB1Ng0ZTBC4G50qP9qQyg/aroMkcdMsHfk26E8jUGRPNt4ftHFzS4YMhwtXuJQ9IgRUuNPA==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@cspell/cspell-types": "8.16.0",
+ "@cspell/cspell-types": "8.17.1",
"comment-json": "^4.2.5",
- "yaml": "^2.6.0"
+ "yaml": "^2.6.1"
},
"engines": {
"node": ">=18"
}
},
"node_modules/cspell-dictionary": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.16.0.tgz",
- "integrity": "sha512-Y3sN6ttLBKbu0dOLcduY641n5QP1srUvZkW4bOTnG455DbIZfilrP1El/2Hl0RS6hC8LN9PM4bsIm/2xgdbApA==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.17.1.tgz",
+ "integrity": "sha512-zSl9l3wii+x16yc2NVZl/+CMLeLBAiuEd5YoFkOYPcbTJnfPwdjMNcj71u7wBvNJ+qwbF+kGbutEt15yHW3NBw==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@cspell/cspell-pipe": "8.16.0",
- "@cspell/cspell-types": "8.16.0",
- "cspell-trie-lib": "8.16.0",
+ "@cspell/cspell-pipe": "8.17.1",
+ "@cspell/cspell-types": "8.17.1",
+ "cspell-trie-lib": "8.17.1",
"fast-equals": "^5.0.1"
},
"engines": {
@@ -3726,15 +3626,14 @@
}
},
"node_modules/cspell-gitignore": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.16.0.tgz",
- "integrity": "sha512-ODKe0ooyzYSBJkwgIVZSRIvzoZfT4tEbFt4fFDT88wPyyfX7xp7MAQhXy5KD1ocXH0WvYbdv37qzn2UbckrahA==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.17.1.tgz",
+ "integrity": "sha512-bk727Zf4FBCjm9Mwvyreyhgjwe+YhPQEW7PldkHiinKd+Irfez4s8GXLQb1EgV0UpvViqaqBqLmngjZdS30BTA==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@cspell/url": "8.16.0",
- "cspell-glob": "8.16.0",
- "cspell-io": "8.16.0",
+ "@cspell/url": "8.17.1",
+ "cspell-glob": "8.17.1",
+ "cspell-io": "8.17.1",
"find-up-simple": "^1.0.0"
},
"bin": {
@@ -3745,13 +3644,12 @@
}
},
"node_modules/cspell-glob": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.16.0.tgz",
- "integrity": "sha512-xJSXRHwfENCNFmjpVSEucXY8E3BrpSCA+TukmOYtLyaMKtn6EAwoCpEU7Oj2tZOjdivprPmQ74k4Dqb1RHjIVQ==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.17.1.tgz",
+ "integrity": "sha512-cUwM5auSt0RvLX7UkP2GEArJRWc85l51B1voArl+3ZIKeMZwcJpJgN3qvImtF8yRTZwYeYCs1sgsihb179q+mg==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@cspell/url": "8.16.0",
+ "@cspell/url": "8.17.1",
"micromatch": "^4.0.8"
},
"engines": {
@@ -3759,14 +3657,13 @@
}
},
"node_modules/cspell-grammar": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.16.0.tgz",
- "integrity": "sha512-vvbJEkBqXocGH/H975RtkfMzVpNxNGMd0JCDd+NjbpeRyZceuChFw5Tie7kHteFY29SwZovub+Am3F4H1kmf9A==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.17.1.tgz",
+ "integrity": "sha512-H5tLcBuW7aUj9L0rR+FSbnWPEsWb8lWppHVidtqw9Ll1CUHWOZC9HTB2RdrhJZrsz/8DJbM2yNbok0Xt0VAfdw==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@cspell/cspell-pipe": "8.16.0",
- "@cspell/cspell-types": "8.16.0"
+ "@cspell/cspell-pipe": "8.17.1",
+ "@cspell/cspell-types": "8.17.1"
},
"bin": {
"cspell-grammar": "bin.mjs"
@@ -3776,42 +3673,40 @@
}
},
"node_modules/cspell-io": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.16.0.tgz",
- "integrity": "sha512-WIK5uhPMjGsTAzm2/fGRbIdr7zWsMVG1fn8wNJYUiYELuyvzvLelfI1VG6szaFCGYqd6Uvgb/fS0uNbwGqCLAQ==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.17.1.tgz",
+ "integrity": "sha512-liIOsblt7oVItifzRAbuxiYrwlgw1VOqKppMxVKtYoAn2VUuuEpjCj6jLWpoTqSszR/38o7ChsHY1LHakhJZmw==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@cspell/cspell-service-bus": "8.16.0",
- "@cspell/url": "8.16.0"
+ "@cspell/cspell-service-bus": "8.17.1",
+ "@cspell/url": "8.17.1"
},
"engines": {
"node": ">=18"
}
},
"node_modules/cspell-lib": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.16.0.tgz",
- "integrity": "sha512-fU8CfECyuhT12COIi4ViQu2bTkdqaa+05YSd2ZV8k8NA7lapPaMFnlooxdfcwwgZJfHeMhRVMzvQF1OhWmwGfA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@cspell/cspell-bundled-dicts": "8.16.0",
- "@cspell/cspell-pipe": "8.16.0",
- "@cspell/cspell-resolver": "8.16.0",
- "@cspell/cspell-types": "8.16.0",
- "@cspell/dynamic-import": "8.16.0",
- "@cspell/filetypes": "8.16.0",
- "@cspell/strong-weak-map": "8.16.0",
- "@cspell/url": "8.16.0",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.17.1.tgz",
+ "integrity": "sha512-66n83Q7bK5tnvkDH7869/pBY/65AKmZVfCOAlsbhJn3YMDbNHFCHR0d1oNMlqG+n65Aco89VGwYfXxImZY+/mA==",
+ "dev": true,
+ "dependencies": {
+ "@cspell/cspell-bundled-dicts": "8.17.1",
+ "@cspell/cspell-pipe": "8.17.1",
+ "@cspell/cspell-resolver": "8.17.1",
+ "@cspell/cspell-types": "8.17.1",
+ "@cspell/dynamic-import": "8.17.1",
+ "@cspell/filetypes": "8.17.1",
+ "@cspell/strong-weak-map": "8.17.1",
+ "@cspell/url": "8.17.1",
"clear-module": "^4.1.2",
"comment-json": "^4.2.5",
- "cspell-config-lib": "8.16.0",
- "cspell-dictionary": "8.16.0",
- "cspell-glob": "8.16.0",
- "cspell-grammar": "8.16.0",
- "cspell-io": "8.16.0",
- "cspell-trie-lib": "8.16.0",
+ "cspell-config-lib": "8.17.1",
+ "cspell-dictionary": "8.17.1",
+ "cspell-glob": "8.17.1",
+ "cspell-grammar": "8.17.1",
+ "cspell-io": "8.17.1",
+ "cspell-trie-lib": "8.17.1",
"env-paths": "^3.0.0",
"fast-equals": "^5.0.1",
"gensequence": "^7.0.0",
@@ -3826,14 +3721,13 @@
}
},
"node_modules/cspell-trie-lib": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.16.0.tgz",
- "integrity": "sha512-Io1qqI0r4U9ewAWBLClFBBlxLeAoIi15PUGJi4Za1xrlgQJwRE8PMNIJNHKmPEIp78Iute3o/JyC2OfWlxl4Sw==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.17.1.tgz",
+ "integrity": "sha512-13WNa5s75VwOjlGzWprmfNbBFIfXyA7tYYrbV+LugKkznyNZJeJPojHouEudcLq3SYb2Q6tJ7qyWcuT5bR9qPA==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@cspell/cspell-pipe": "8.16.0",
- "@cspell/cspell-types": "8.16.0",
+ "@cspell/cspell-pipe": "8.17.1",
+ "@cspell/cspell-types": "8.17.1",
"gensequence": "^7.0.0"
},
"engines": {
@@ -3991,7 +3885,6 @@
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
"integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -4041,7 +3934,6 @@
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"path-type": "^4.0.0"
},
@@ -4188,7 +4080,6 @@
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz",
"integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==",
"dev": true,
- "license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
@@ -4333,8 +4224,7 @@
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz",
"integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/external-editor": {
"version": "3.1.0",
@@ -4355,7 +4245,6 @@
"resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz",
"integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
@@ -4365,7 +4254,6 @@
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -4384,11 +4272,10 @@
"dev": true
},
"node_modules/fastq": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
- "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz",
+ "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==",
"dev": true,
- "license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
}
@@ -4474,7 +4361,6 @@
"resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz",
"integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -4577,7 +4463,6 @@
"resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz",
"integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=18"
}
@@ -4708,7 +4593,6 @@
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
- "license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -4721,7 +4605,6 @@
"resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz",
"integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==",
"dev": true,
- "license": "MIT",
"dependencies": {
"ini": "4.1.1"
},
@@ -4746,7 +4629,6 @@
"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
"integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"dev": true,
- "license": "MIT",
"dependencies": {
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
@@ -4782,7 +4664,6 @@
"resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz",
"integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -4891,7 +4772,6 @@
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">= 4"
}
@@ -4901,7 +4781,6 @@
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
@@ -4918,7 +4797,6 @@
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
- "license": "MIT",
"dependencies": {
"callsites": "^3.0.0"
},
@@ -4931,7 +4809,6 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=4"
}
@@ -4960,7 +4837,6 @@
"resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
"integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==",
"dev": true,
- "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -5054,7 +4930,6 @@
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -5082,7 +4957,6 @@
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -5131,7 +5005,6 @@
"resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz",
"integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"better-path-resolve": "1.0.0"
},
@@ -5144,7 +5017,6 @@
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -7136,8 +7008,7 @@
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
"integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/longest-streak": {
"version": "3.1.0",
@@ -7470,7 +7341,6 @@
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">= 8"
}
@@ -8135,15 +8005,13 @@
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz",
"integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/p-filter": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz",
"integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"p-map": "^2.0.0"
},
@@ -8183,7 +8051,6 @@
"resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
"integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -8246,7 +8113,6 @@
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz",
"integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"callsites": "^3.1.0"
},
@@ -8360,7 +8226,6 @@
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -8388,7 +8253,6 @@
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -8415,11 +8279,10 @@
}
},
"node_modules/prettier": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.0.tgz",
- "integrity": "sha512-/OXNZcLyWkfo13ofOW5M7SLh+k5pnIs07owXK2teFpnfaOEcycnSy7HQxldaVX1ZP/7Q8oO1eDuQJNwbomQq5Q==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz",
+ "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==",
"dev": true,
- "license": "MIT",
"bin": {
"prettier": "bin/prettier.cjs"
},
@@ -8584,8 +8447,7 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ],
- "license": "MIT"
+ ]
},
"node_modules/react-is": {
"version": "18.2.0",
@@ -8598,7 +8460,6 @@
"resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz",
"integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.5",
"js-yaml": "^3.6.1",
@@ -8614,7 +8475,6 @@
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
"integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=4"
}
@@ -8623,8 +8483,7 @@
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/remark-parse": {
"version": "11.0.0",
@@ -8662,7 +8521,6 @@
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
"integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=0.10"
}
@@ -8728,7 +8586,6 @@
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true,
- "license": "MIT",
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
@@ -8768,7 +8625,6 @@
"url": "https://feross.org/support"
}
],
- "license": "MIT",
"dependencies": {
"queue-microtask": "^1.2.2"
}
@@ -8929,7 +8785,6 @@
"resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz",
"integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==",
"dev": true,
- "license": "SEE LICENSE IN LICENSE",
"dependencies": {
"cross-spawn": "^7.0.5",
"signal-exit": "^4.0.1"
@@ -8940,7 +8795,6 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
- "license": "ISC",
"engines": {
"node": ">=14"
},
@@ -9586,15 +9440,13 @@
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
"integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/vscode-uri": {
"version": "3.0.8",
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
"integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/walker": {
"version": "1.0.8",
@@ -9748,7 +9600,6 @@
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz",
"integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -9772,11 +9623,10 @@
"dev": true
},
"node_modules/yaml": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz",
- "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==",
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",
+ "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==",
"dev": true,
- "license": "ISC",
"bin": {
"yaml": "bin.mjs"
},
From 3936e23789be31f05ca2a9ad7b389d6a17b9d224 Mon Sep 17 00:00:00 2001
From: Omar Tawfik <15987992+OmarTawfik@users.noreply.github.com>
Date: Wed, 1 Jan 2025 18:35:18 -0800
Subject: [PATCH 4/4] Use database of partial paths to speed up bindings
resolution (#1204)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Rebasing #1198 on latest after #1195 was merged.
---------
Co-authored-by: Gustavo Giráldez
---
Cargo.lock | 10 +-
Cargo.toml | 2 +-
.../crate/src/extensions/bindings/mod.rs | 4 +-
.../cargo/crate/src/runtime/bindings/mod.rs | 9 +-
.../crate/src/runtime/compilation/unit.rs | 6 +-
.../cargo/crate/src/runtime/cst/mod.rs | 2 +-
.../wasm/src/runtime/wrappers/bindings/mod.rs | 58 +-
.../bindings/generated/public_api.txt | 92 +-
.../src/builder/{ => loader}/cancellation.rs | 0
.../src/builder/{ => loader}/functions.rs | 3 +-
.../bindings/src/builder/loader/mod.rs | 988 +++++++++++++++
crates/metaslang/bindings/src/builder/mod.rs | 1096 +++--------------
.../bindings/src/builder/resolver.rs | 300 +++++
.../bindings/src/graph/definition.rs | 96 ++
.../{location/mod.rs => graph/location.rs} | 0
crates/metaslang/bindings/src/graph/mod.rs | 159 +++
.../metaslang/bindings/src/graph/reference.rs | 81 ++
crates/metaslang/bindings/src/lib.rs | 474 +------
crates/metaslang/bindings/src/resolver/mod.rs | 212 ----
crates/metaslang/cst/generated/public_api.txt | 34 +-
crates/metaslang/cst/src/kinds.rs | 28 +
crates/metaslang/cst/src/nodes.rs | 30 +-
crates/metaslang/cst/src/query/engine.rs | 3 +-
crates/metaslang/cst/src/query/model.rs | 3 +-
crates/metaslang/cst/src/query/parser.rs | 3 +-
.../inputs/language/bindings/rules.msgb | 5 +
.../cargo/crate/generated/public_api.txt | 14 +-
.../crate/src/extensions/bindings/mod.rs | 6 +-
.../bindings/generated/binding_rules.rs | 5 +
.../cargo/crate/src/generated/bindings/mod.rs | 9 +-
.../crate/src/generated/compilation/unit.rs | 6 +-
.../cargo/crate/src/generated/cst/mod.rs | 2 +-
.../tests/src/bindings_output/renderer.rs | 48 +-
.../cargo/tests/src/bindings_output/runner.rs | 7 +-
.../src/generated/wrappers/bindings/mod.rs | 58 +-
.../solidity/testing/perf/benches/iai/main.rs | 20 +-
crates/solidity/testing/perf/src/lib.rs | 13 +-
.../testing/perf/src/tests/bindings_build.rs | 40 +
.../perf/src/tests/bindings_resolve.rs | 61 +
.../testing/perf/src/tests/definitions.rs | 43 -
.../testing/perf/src/tests/init_bindings.rs | 24 -
crates/solidity/testing/perf/src/tests/mod.rs | 5 +-
.../solidity/testing/perf/src/tests/parser.rs | 1 +
.../testing/perf/src/tests/references.rs | 32 -
.../solidity/testing/sanctuary/src/tests.rs | 49 +-
.../crate/src/extensions/bindings/mod.rs | 4 +-
.../cargo/crate/src/generated/bindings/mod.rs | 9 +-
.../crate/src/generated/compilation/unit.rs | 6 +-
.../cargo/crate/src/generated/cst/mod.rs | 2 +-
.../src/generated/wrappers/bindings/mod.rs | 58 +-
50 files changed, 2138 insertions(+), 2082 deletions(-)
rename crates/metaslang/bindings/src/builder/{ => loader}/cancellation.rs (100%)
rename crates/metaslang/bindings/src/builder/{ => loader}/functions.rs (98%)
create mode 100644 crates/metaslang/bindings/src/builder/loader/mod.rs
create mode 100644 crates/metaslang/bindings/src/builder/resolver.rs
create mode 100644 crates/metaslang/bindings/src/graph/definition.rs
rename crates/metaslang/bindings/src/{location/mod.rs => graph/location.rs} (100%)
create mode 100644 crates/metaslang/bindings/src/graph/mod.rs
create mode 100644 crates/metaslang/bindings/src/graph/reference.rs
delete mode 100644 crates/metaslang/bindings/src/resolver/mod.rs
create mode 100644 crates/solidity/testing/perf/src/tests/bindings_build.rs
create mode 100644 crates/solidity/testing/perf/src/tests/bindings_resolve.rs
delete mode 100644 crates/solidity/testing/perf/src/tests/definitions.rs
delete mode 100644 crates/solidity/testing/perf/src/tests/init_bindings.rs
delete mode 100644 crates/solidity/testing/perf/src/tests/references.rs
diff --git a/Cargo.lock b/Cargo.lock
index 528900d499..6284efc61a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1506,9 +1506,8 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
[[package]]
name = "lsp-positions"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa61ce94f83d24eba829bbba054b40e9996d8531c87670799fd0c43dea97be37"
+version = "0.3.4"
+source = "git+https://github.com/NomicFoundation/stack-graphs?branch=nomic#9631ed9c7de4443525491745d46557dc16a7355c"
dependencies = [
"memchr",
"unicode-segmentation",
@@ -2545,9 +2544,8 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "stack-graphs"
-version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af63a628b6666b3ce870cac60623d71d1575a9ccc5b2f0a2f83143c3e7da9a3a"
+version = "0.14.1"
+source = "git+https://github.com/NomicFoundation/stack-graphs?branch=nomic#9631ed9c7de4443525491745d46557dc16a7355c"
dependencies = [
"bitvec",
"controlled-option",
diff --git a/Cargo.toml b/Cargo.toml
index 21308200f8..dd157f1f16 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -130,7 +130,7 @@ serde = { version = "1.0.217", features = ["derive", "rc"] }
serde_json = { version = "1.0.134", features = ["preserve_order"] }
similar-asserts = { version = "1.6.0" }
smallvec = { version = "1.7.0", features = ["union"] }
-stack-graphs = { version = "0.13.0" }
+stack-graphs = { git = "https://github.com/NomicFoundation/stack-graphs", branch = "nomic" }
string-interner = { version = "0.17.0", features = [
"std",
"inline-more",
diff --git a/crates/codegen/runtime/cargo/crate/src/extensions/bindings/mod.rs b/crates/codegen/runtime/cargo/crate/src/extensions/bindings/mod.rs
index eee8b7880f..c3f95c7400 100644
--- a/crates/codegen/runtime/cargo/crate/src/extensions/bindings/mod.rs
+++ b/crates/codegen/runtime/cargo/crate/src/extensions/bindings/mod.rs
@@ -1,11 +1,11 @@
use semver::Version;
-use crate::bindings::BindingGraph;
+use crate::bindings::BindingGraphBuilder;
use crate::parser::ParserInitializationError;
#[allow(clippy::needless_pass_by_value)]
pub fn add_built_ins(
- _binding_graph: &mut BindingGraph,
+ _binding_graph_builder: &mut BindingGraphBuilder,
_version: Version,
) -> Result<(), ParserInitializationError> {
unreachable!("Built-ins are Solidity-specific")
diff --git a/crates/codegen/runtime/cargo/crate/src/runtime/bindings/mod.rs b/crates/codegen/runtime/cargo/crate/src/runtime/bindings/mod.rs
index 4766b80e6c..052c6ba4f2 100644
--- a/crates/codegen/runtime/cargo/crate/src/runtime/bindings/mod.rs
+++ b/crates/codegen/runtime/cargo/crate/src/runtime/bindings/mod.rs
@@ -10,9 +10,10 @@ use semver::Version;
use crate::cst::KindTypes;
+pub type BindingGraphBuilder = metaslang_bindings::BindingGraphBuilder;
pub type BindingGraph = metaslang_bindings::BindingGraph;
-pub type Definition<'a> = metaslang_bindings::Definition<'a, KindTypes>;
-pub type Reference<'a> = metaslang_bindings::Reference<'a, KindTypes>;
+pub type Definition = metaslang_bindings::Definition;
+pub type Reference = metaslang_bindings::Reference;
pub type BindingLocation = metaslang_bindings::BindingLocation;
pub type UserFileLocation = metaslang_bindings::UserFileLocation;
@@ -29,8 +30,8 @@ pub enum BindingGraphInitializationError {
pub fn create_with_resolver(
version: Version,
resolver: Rc>,
-) -> Result {
- let mut binding_graph = BindingGraph::create(
+) -> Result {
+ let mut binding_graph = BindingGraphBuilder::create(
version.clone(),
binding_rules::BINDING_RULES_SOURCE,
resolver,
diff --git a/crates/codegen/runtime/cargo/crate/src/runtime/compilation/unit.rs b/crates/codegen/runtime/cargo/crate/src/runtime/compilation/unit.rs
index aea2d3cd9c..e909b5882d 100644
--- a/crates/codegen/runtime/cargo/crate/src/runtime/compilation/unit.rs
+++ b/crates/codegen/runtime/cargo/crate/src/runtime/compilation/unit.rs
@@ -43,14 +43,14 @@ impl CompilationUnit {
files: self.files.clone(),
};
- let mut binding_graph =
+ let mut builder =
create_with_resolver(self.language_version.clone(), Rc::new(resolver))?;
for (id, file) in &self.files {
- binding_graph.add_user_file(id, file.create_tree_cursor());
+ builder.add_user_file(id, file.create_tree_cursor());
}
- Ok(Rc::new(binding_graph))
+ Ok(builder.build())
})
}
}
diff --git a/crates/codegen/runtime/cargo/crate/src/runtime/cst/mod.rs b/crates/codegen/runtime/cargo/crate/src/runtime/cst/mod.rs
index 53885c6a25..7aa60861d2 100644
--- a/crates/codegen/runtime/cargo/crate/src/runtime/cst/mod.rs
+++ b/crates/codegen/runtime/cargo/crate/src/runtime/cst/mod.rs
@@ -10,7 +10,7 @@ mod terminal_kind;
pub use edge_label::EdgeLabel;
pub(crate) use lexical_context::{IsLexicalContext, LexicalContext, LexicalContextType};
pub use metaslang_cst::kinds::{
- EdgeLabelExtensions, NonterminalKindExtensions, TerminalKindExtensions,
+ EdgeLabelExtensions, NodeKind, NonterminalKindExtensions, TerminalKindExtensions,
};
pub use nonterminal_kind::NonterminalKind;
pub use terminal_kind::TerminalKind;
diff --git a/crates/codegen/runtime/cargo/wasm/src/runtime/wrappers/bindings/mod.rs b/crates/codegen/runtime/cargo/wasm/src/runtime/wrappers/bindings/mod.rs
index c093fb0b7c..7d2d23d710 100644
--- a/crates/codegen/runtime/cargo/wasm/src/runtime/wrappers/bindings/mod.rs
+++ b/crates/codegen/runtime/cargo/wasm/src/runtime/wrappers/bindings/mod.rs
@@ -12,52 +12,8 @@ mod ffi {
mod rust {
pub use crate::rust_crate::bindings::{
- BindingGraph, BindingLocation, BuiltInLocation, UserFileLocation,
+ BindingGraph, BindingLocation, BuiltInLocation, Definition, Reference, UserFileLocation,
};
-
- /// TODO: This is a work-around for the fact that `metaslang_bindings` internals (handles, locators, etc...) are exposed.
- /// We should clean this when we finally publish `__experimental_bindings_api`.
- /// That means removing the types below, and using the original types instead.
- #[derive(Debug, Clone)]
- pub struct Definition {
- pub id: usize,
- pub name_location: BindingLocation,
- pub definiens_location: BindingLocation,
- }
-
- impl From> for Definition {
- fn from(definition: crate::rust_crate::bindings::Definition<'_>) -> Self {
- Self {
- id: definition.id(),
- name_location: definition.name_location(),
- definiens_location: definition.definiens_location(),
- }
- }
- }
-
- /// TODO: This is a work-around for the fact that `metaslang_bindings` internals (handles, locators, etc...) are exposed.
- /// We should clean this when we finally publish `__experimental_bindings_api`.
- /// That means removing the types below, and using the original types instead.
- #[derive(Debug, Clone)]
- pub struct Reference {
- pub id: usize,
- pub location: BindingLocation,
- pub definitions: Vec,
- }
-
- impl From> for Reference {
- fn from(reference: crate::rust_crate::bindings::Reference<'_>) -> Self {
- Self {
- id: reference.id(),
- location: reference.location(),
- definitions: reference
- .definitions()
- .into_iter()
- .map(Into::into)
- .collect(),
- }
- }
- }
}
impl ffi::Guest for crate::wasm_crate::World {
@@ -100,15 +56,15 @@ define_rc_wrapper! { BindingGraph {
define_wrapper! { Definition {
fn id(&self) -> u32 {
- self._borrow_ffi().id.try_into().unwrap()
+ self._borrow_ffi().id().try_into().unwrap()
}
fn name_location(&self) -> ffi::BindingLocation {
- self._borrow_ffi().name_location.clone()._into_ffi()
+ self._borrow_ffi().name_location()._into_ffi()
}
fn definiens_location(&self) -> ffi::BindingLocation {
- self._borrow_ffi().definiens_location.clone()._into_ffi()
+ self._borrow_ffi().definiens_location()._into_ffi()
}
} }
@@ -120,15 +76,15 @@ define_wrapper! { Definition {
define_wrapper! { Reference {
fn id(&self) -> u32 {
- self._borrow_ffi().id.try_into().unwrap()
+ self._borrow_ffi().id().try_into().unwrap()
}
fn location(&self) -> ffi::BindingLocation {
- self._borrow_ffi().location.clone()._into_ffi()
+ self._borrow_ffi().location().clone()._into_ffi()
}
fn definitions(&self) -> Vec {
- self._borrow_ffi().definitions.iter().cloned().map(IntoFFI::_into_ffi).collect()
+ self._borrow_ffi().definitions().iter().cloned().map(IntoFFI::_into_ffi).collect()
}
} }
diff --git a/crates/metaslang/bindings/generated/public_api.txt b/crates/metaslang/bindings/generated/public_api.txt
index e4b11e5bec..a029a0307a 100644
--- a/crates/metaslang/bindings/generated/public_api.txt
+++ b/crates/metaslang/bindings/generated/public_api.txt
@@ -11,64 +11,54 @@ impl core::c
pub fn metaslang_bindings::BindingLocation::clone(&self) -> metaslang_bindings::BindingLocation
impl core::fmt::Debug for metaslang_bindings::BindingLocation
pub fn metaslang_bindings::BindingLocation::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub enum metaslang_bindings::FileDescriptor
-pub metaslang_bindings::FileDescriptor::System(alloc::string::String)
-pub metaslang_bindings::FileDescriptor::User(alloc::string::String)
-impl metaslang_bindings::FileDescriptor
-pub fn metaslang_bindings::FileDescriptor::get_path(&self) -> &str
-pub fn metaslang_bindings::FileDescriptor::is_system(&self) -> bool
-pub fn metaslang_bindings::FileDescriptor::is_user(&self) -> bool
-pub fn metaslang_bindings::FileDescriptor::is_user_path(&self, path: &str) -> bool
-pub enum metaslang_bindings::ResolutionError<'a, KT: metaslang_cst::kinds::KindTypes + 'static>
-pub metaslang_bindings::ResolutionError::AmbiguousDefinitions(alloc::vec::Vec>)
-pub metaslang_bindings::ResolutionError::Unresolved
pub struct metaslang_bindings::BindingGraph
impl metaslang_bindings::BindingGraph
-pub fn metaslang_bindings::BindingGraph::add_system_file(&mut self, file_path: &str, tree_cursor: metaslang_cst::cursor::Cursor)
-pub fn metaslang_bindings::BindingGraph::add_user_file(&mut self, file_path: &str, tree_cursor: metaslang_cst::cursor::Cursor)
-pub fn metaslang_bindings::BindingGraph::add_user_file_returning_graph(&mut self, file_path: &str, tree_cursor: metaslang_cst::cursor::Cursor) -> metaslang_graph_builder::graph::Graph
-pub fn metaslang_bindings::BindingGraph::all_definitions(&self) -> impl core::iter::traits::iterator::Iterator- > + '_
-pub fn metaslang_bindings::BindingGraph::all_references(&self) -> impl core::iter::traits::iterator::Iterator
- > + '_
-pub fn metaslang_bindings::BindingGraph::create(version: semver::Version, binding_rules: &str, path_resolver: alloc::rc::Rc>) -> Self
-pub fn metaslang_bindings::BindingGraph::definition_at(&self, cursor: &metaslang_cst::cursor::Cursor) -> core::option::Option>
-pub fn metaslang_bindings::BindingGraph::reference_at(&self, cursor: &metaslang_cst::cursor::Cursor) -> core::option::Option>
+pub fn metaslang_bindings::BindingGraph::all_definitions(self: &alloc::rc::Rc) -> impl core::iter::traits::iterator::Iterator
- > + '_
+pub fn metaslang_bindings::BindingGraph::all_references(self: &alloc::rc::Rc) -> impl core::iter::traits::iterator::Iterator
- > + '_
+pub fn metaslang_bindings::BindingGraph::definition_at(self: &alloc::rc::Rc, cursor: &metaslang_cst::cursor::Cursor) -> core::option::Option>
+pub fn metaslang_bindings::BindingGraph::reference_at(self: &alloc::rc::Rc, cursor: &metaslang_cst::cursor::Cursor) -> core::option::Option>
+pub struct metaslang_bindings::BindingGraphBuilder
+impl metaslang_bindings::BindingGraphBuilder
+pub fn metaslang_bindings::BindingGraphBuilder::add_system_file(&mut self, file_path: &str, tree_cursor: metaslang_cst::cursor::Cursor)
+pub fn metaslang_bindings::BindingGraphBuilder::add_user_file(&mut self, file_path: &str, tree_cursor: metaslang_cst::cursor::Cursor)
+pub fn metaslang_bindings::BindingGraphBuilder::add_user_file_returning_graph(&mut self, file_path: &str, tree_cursor: metaslang_cst::cursor::Cursor) -> metaslang_graph_builder::graph::Graph
+pub fn metaslang_bindings::BindingGraphBuilder::build(self) -> alloc::rc::Rc>
+pub fn metaslang_bindings::BindingGraphBuilder::create(version: semver::Version, binding_rules: &str, path_resolver: alloc::rc::Rc>) -> Self
pub struct metaslang_bindings::BuiltInLocation
impl core::clone::Clone for metaslang_bindings::BuiltInLocation
pub fn metaslang_bindings::BuiltInLocation::clone(&self) -> metaslang_bindings::BuiltInLocation
impl core::fmt::Debug for metaslang_bindings::BuiltInLocation
pub fn metaslang_bindings::BuiltInLocation::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-pub struct metaslang_bindings::Definition<'a, KT: metaslang_cst::kinds::KindTypes + 'static>
-impl<'a, KT: metaslang_cst::kinds::KindTypes + 'static> metaslang_bindings::Definition<'a, KT>
-pub fn metaslang_bindings::Definition<'a, KT>::definiens_location(&self) -> metaslang_bindings::BindingLocation
-pub fn metaslang_bindings::Definition<'a, KT>::get_cursor(&self) -> &metaslang_cst::cursor::Cursor
-pub fn metaslang_bindings::Definition<'a, KT>::get_definiens_cursor(&self) -> &metaslang_cst::cursor::Cursor
-pub fn metaslang_bindings::Definition<'a, KT>::get_file(&self) -> metaslang_bindings::FileDescriptor
-pub fn metaslang_bindings::Definition<'a, KT>::id(&self) -> usize
-pub fn metaslang_bindings::Definition<'a, KT>::name_location(&self) -> metaslang_bindings::BindingLocation
-impl<'a, KT: core::clone::Clone + metaslang_cst::kinds::KindTypes + 'static> core::clone::Clone for metaslang_bindings::Definition<'a, KT>
-pub fn metaslang_bindings::Definition<'a, KT>::clone(&self) -> metaslang_bindings::Definition<'a, KT>
-impl core::cmp::Eq for metaslang_bindings::Definition<'_, KT>
-impl core::cmp::PartialEq for metaslang_bindings::Definition<'_, KT>
-pub fn metaslang_bindings::Definition<'_, KT>::eq(&self, other: &Self) -> bool
-impl core::fmt::Debug for metaslang_bindings::Definition<'_, KT>
-pub fn metaslang_bindings::Definition<'_, KT>::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-impl core::fmt::Display for metaslang_bindings::Definition<'_, KT>
-pub fn metaslang_bindings::Definition<'_, KT>::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
-impl core::hash::Hash for metaslang_bindings::Definition<'_, KT>
-pub fn metaslang_bindings::Definition<'_, KT>::hash(&self, state: &mut H)
-pub struct metaslang_bindings::Reference<'a, KT: metaslang_cst::kinds::KindTypes + 'static>
-impl<'a, KT: metaslang_cst::kinds::KindTypes + 'static> metaslang_bindings::Reference<'a, KT>
-pub fn metaslang_bindings::Reference<'a, KT>::definitions(&self) -> alloc::vec::Vec>
-pub fn metaslang_bindings::Reference<'a, KT>::get_cursor(&self) -> &metaslang_cst::cursor::Cursor
-pub fn metaslang_bindings::Reference<'a, KT>::get_file(&self) -> metaslang_bindings::FileDescriptor
-pub fn metaslang_bindings::Reference<'a, KT>::id(&self) -> usize
-pub fn metaslang_bindings::Reference<'a, KT>::location(&self) -> metaslang_bindings::BindingLocation
-impl<'a, KT: core::clone::Clone + metaslang_cst::kinds::KindTypes + 'static> core::clone::Clone for metaslang_bindings::Reference<'a, KT>
-pub fn metaslang_bindings::Reference<'a, KT>::clone(&self) -> metaslang_bindings::Reference<'a, KT>
-impl core::cmp::PartialEq for metaslang_bindings::Reference<'_, KT>
-pub fn metaslang_bindings::Reference<'_, KT>::eq(&self, other: &Self) -> bool
-impl core::fmt::Display for metaslang_bindings::Reference<'_, KT>
-pub fn metaslang_bindings::Reference<'_, KT>::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub struct metaslang_bindings::Definition
+impl metaslang_bindings::Definition
+pub fn metaslang_bindings::Definition::definiens_location(&self) -> metaslang_bindings::BindingLocation
+pub fn metaslang_bindings::Definition::get_cursor(&self) -> &metaslang_cst::cursor::Cursor
+pub fn metaslang_bindings::Definition::get_definiens_cursor(&self) -> &metaslang_cst::cursor::Cursor
+pub fn metaslang_bindings::Definition::get_file(&self) -> FileDescriptor
+pub fn metaslang_bindings::Definition::id(&self) -> usize
+pub fn metaslang_bindings::Definition::name_location(&self) -> metaslang_bindings::BindingLocation
+impl core::clone::Clone for metaslang_bindings::Definition
+pub fn metaslang_bindings::Definition::clone(&self) -> metaslang_bindings::Definition
+impl core::cmp::Eq for metaslang_bindings::Definition
+impl core::cmp::PartialEq for metaslang_bindings::Definition
+pub fn metaslang_bindings::Definition::eq(&self, other: &Self) -> bool
+impl core::fmt::Debug for metaslang_bindings::Definition
+pub fn metaslang_bindings::Definition::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+impl core::fmt::Display for metaslang_bindings::Definition
+pub fn metaslang_bindings::Definition::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
+pub struct metaslang_bindings::Reference
+impl metaslang_bindings::Reference
+pub fn metaslang_bindings::Reference::definitions(&self) -> alloc::vec::Vec>
+pub fn metaslang_bindings::Reference::get_cursor(&self) -> &metaslang_cst::cursor::Cursor
+pub fn metaslang_bindings::Reference::get_file(&self) -> FileDescriptor
+pub fn metaslang_bindings::Reference::id(&self) -> usize
+pub fn metaslang_bindings::Reference::location(&self) -> metaslang_bindings::BindingLocation
+impl core::clone::Clone for metaslang_bindings::Reference
+pub fn metaslang_bindings::Reference::clone(&self) -> metaslang_bindings::Reference
+impl core::cmp::PartialEq for metaslang_bindings::Reference
+pub fn metaslang_bindings::Reference::eq(&self, other: &Self) -> bool
+impl core::fmt::Display for metaslang_bindings::Reference
+pub fn metaslang_bindings::Reference::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
pub struct metaslang_bindings::UserFileLocation
impl metaslang_bindings::UserFileLocation
pub fn metaslang_bindings::UserFileLocation::cursor(&self) -> &metaslang_cst::cursor::Cursor
diff --git a/crates/metaslang/bindings/src/builder/cancellation.rs b/crates/metaslang/bindings/src/builder/loader/cancellation.rs
similarity index 100%
rename from crates/metaslang/bindings/src/builder/cancellation.rs
rename to crates/metaslang/bindings/src/builder/loader/cancellation.rs
diff --git a/crates/metaslang/bindings/src/builder/functions.rs b/crates/metaslang/bindings/src/builder/loader/functions.rs
similarity index 98%
rename from crates/metaslang/bindings/src/builder/functions.rs
rename to crates/metaslang/bindings/src/builder/loader/functions.rs
index 27ff5d9aa3..6219d7e2aa 100644
--- a/crates/metaslang/bindings/src/builder/functions.rs
+++ b/crates/metaslang/bindings/src/builder/loader/functions.rs
@@ -63,7 +63,8 @@ mod resolver {
use metaslang_graph_builder::graph::{Graph, Value};
use metaslang_graph_builder::ExecutionError;
- use crate::{FileDescriptor, PathResolver};
+ use crate::builder::FileDescriptor;
+ use crate::PathResolver;
pub fn add_functions(
functions: &mut Functions,
diff --git a/crates/metaslang/bindings/src/builder/loader/mod.rs b/crates/metaslang/bindings/src/builder/loader/mod.rs
new file mode 100644
index 0000000000..56b679d0a6
--- /dev/null
+++ b/crates/metaslang/bindings/src/builder/loader/mod.rs
@@ -0,0 +1,988 @@
+// -*- coding: utf-8 -*-
+// ------------------------------------------------------------------------------------------------
+// Copyright © 2021, stack-graphs authors.
+// Copyright © 2024, slang authors.
+// Licensed under MIT license
+// Please see the LICENSE file in the root of this crate for license details.
+// ------------------------------------------------------------------------------------------------
+
+//! This module lets you construct [stack graphs][] using this crate's [graph construction DSL][].
+//! The graph DSL lets you construct arbitrary graph structures from the parsed syntax tree of a
+//! source file. If you construct a graph using the vocabulary of attributes described below, then
+//! the result of executing the graph DSL will be a valid stack graph, which we can then use for
+//! name binding lookups.
+//!
+//! ## Prerequisites
+//!
+//! [stack graphs]: https://docs.rs/stack-graphs/*/
+//! [graph construction DSL]: https://docs.rs/metaslang_graph_builder/*/
+//!
+//! To process a particular source language, you'll need to first get the CST from the source, using
+//! the parser constructed from the language definition that uses the `metaslang_cst` crate.
+//!
+//! You will then need to create _stack graph construction rules_ for your language. These rules
+//! are implemented using metaslang's [graph construction DSL][], which is based from tree-sitter's
+//! graph construction DSL. They define the particular stack graph nodes and edges that should be
+//! created for each part of the parsed syntax tree of a source file.
+//!
+//! ## Graph DSL vocabulary
+//!
+//! **Please note**: This documentation assumes you are already familiar with stack graphs, and how
+//! to use different stack graph node types, and the connectivity between nodes, to implement the
+//! name binding semantics of your language. We assume that you know what kind of stack graph you
+//! want to produce; this documentation focuses only on the mechanics of _how_ to create that stack
+//! graph content.
+//!
+//! As mentioned above, your stack graph construction rules should create stack graph nodes and
+//! edges from the parsed content of a source file. You will use MSGB [stanzas][] to match on
+//! different parts of the parsed syntax tree, and create stack graph content for each match.
+//!
+//! ### Creating stack graph nodes
+//!
+//! To create a stack graph node for each identifier in a Solidity file, you could use the following
+//! MSGB stanza:
+//!
+//! ``` skip
+//! [Identifier] {
+//! node new_node
+//! }
+//! ```
+//!
+//! (Here, `node` is a MSGB statement that creates a new node, and `new_node` is the name of a local
+//! variable that the new node is assigned to, letting you refer to the new node in the rest of the
+//! stanza.)
+//!
+//! [stanzas]: https://docs.rs/tree-sitter-graph/*/tree_sitter_graph/reference/index.html#high-level-structure
+//!
+//! By default, this new node will be a _scope node_. If you need to create a different kind of stack
+//! graph node, set the `type` attribute on the new node:
+//!
+//! ``` skip
+//! [Identifier] {
+//! node new_node
+//! attr (new_node) type = "push_symbol"
+//! }
+//! ```
+//!
+//! The valid `type` values are:
+//!
+//! - `drop_scopes`: a _drop scopes_ node
+//! - `pop_symbol`: a _pop symbol_ node
+//! - `pop_scoped_symbol`: a _pop scoped symbol_ node
+//! - `push_symbol`: a _push symbol_ node
+//! - `push_scoped_symbol`: a _push scoped symbol_ node
+//! - `scope`: a _scope_ node
+//!
+//! A node without an explicit `type` attribute is assumed to be of type `scope`.
+//!
+//! Certain node types — `pop_symbol`, `pop_scoped_symbol`, `push_symbol` and `push_scoped_symbol` —
+//! also require you to provide a `symbol` attribute. Its value must be a string, but will typically
+//! come from the content of a parsed syntax node using the [`source-text`][] function and a syntax
+//! capture:
+//!
+//! [`source-text`]: https://docs.rs/tree-sitter-graph/*/tree_sitter_graph/reference/functions/index.html#source-text
+//!
+//! ``` skip
+//! @id [Identifier] {
+//! node new_node
+//! attr (new_node) type = "push_symbol", symbol = (source-text @id)
+//! }
+//! ```
+//!
+//! Node types `pop_symbol` and `pop_scoped_symbol` allow an optional `is_definition` attribute,
+//! which marks that node as a proper definition. Node types `push_symbol` and `push_scoped_symbol`
+//! allow an optional `is_reference` attribute, which marks the node as a proper reference. When
+//! `is_definition` or `is_reference` are set, the `source_node` attribute is required.
+//!
+//! ``` skip
+//! @id [Identifier] {
+//! node new_node
+//! attr (new_node) type = "push_symbol", symbol = (source-text @id), is_reference, source_node = @id
+//! }
+//! ```
+//!
+//! A _push scoped symbol_ node requires a `scope` attribute. Its value must be a reference to an
+//! `exported` node that you've already created. (This is the exported scope node that will be
+//! pushed onto the scope stack.) For instance:
+//!
+//! ``` skip
+//! @id [Identifier] {
+//! node new_exported_scope_node
+//! attr (new_exported_scope_node) is_exported
+//! node new_push_scoped_symbol_node
+//! attr (new_push_scoped_symbol_node)
+//! type = "push_scoped_symbol",
+//! symbol = (source-text @id),
+//! scope = new_exported_scope_node
+//! }
+//! ```
+//!
+//! Nodes of type `scope` allow an optional `is_exported` attribute, that is required to use the
+//! scope in a `push_scoped_symbol` node.
+//!
+//!
+//! ### Annotating nodes with location information
+//!
+//! You can annotate any stack graph node that you create with location information, identifying
+//! the portion of the source file that the node "belongs to". This is _required_ for definition
+//! and reference nodes, since the location information determines which parts of the source file
+//! the user can _click on_, and the _destination_ of any code navigation queries the user makes.
+//! To do this, add a `source_node` attribute, whose value is a syntax node capture:
+//!
+//! ``` skip
+//! @func [FunctionDefinition [FunctionName @id [Identifier]]] {
+//! node def
+//! attr (def) type = "pop_symbol", symbol = (source-text @id), source_node = @func, is_definition
+//! }
+//! ```
+//!
+//! Note how in this example, we use a different syntax node for the _target_ of the definition
+//! (the entirety of the function definition) and for the _name_ of the definition (the content of
+//! the function's `name`).
+//!
+//! Adding the `empty_source_span` attribute will use an empty source span located at the start of
+//! the span of the `source_node`. This can be useful when a proper reference or definition is
+//! desired, and thus `source_node` is required, but the span of the available source node is too
+//! large. For example, a module definition which is located at the start of the program, but does
+//! span the whole program:
+//!
+//! ``` skip
+//! @unit [SourceUnit] {
+//! ; ...
+//! node mod_def
+//! attr mod_def type = "pop_symbol", symbol = mod_name, is_definition, source_node = @unit, empty_source_span
+//! ; ...
+//! }
+//! ```
+//!
+//! ### Annotating nodes with syntax type information
+//!
+//! You can annotate any stack graph node with information about its syntax type. To do this, add a
+//! `syntax_type` attribute, whose value is a string indicating the syntax type.
+//!
+//! ``` skip
+//! @func [FunctionDefinition [FunctionName @id [Identifier]]] {
+//! node def
+//! ; ...
+//! attr (def) syntax_type = "function"
+//! }
+//! ```
+//!
+//! ### Annotating definitions with definiens information
+//!
+//! You cannot annotate definitions with a definiens, which is the thing the definition covers. For
+//! example, for a function definition, the definiens would be the function body. To do this, add a
+//! `definiens_node` attribute, whose value is a syntax node that spans the definiens.
+//!
+//! ``` skip
+//! @func [FunctionDefinition [FunctionName @id [Identifier]] @body [FunctionBody]] {
+//! node def
+//! ; ...
+//! attr (def) definiens_node = @body
+//! }
+//! ```
+//!
+//! Definiens are optional and setting them to `#null` explicitly is allowed.
+//!
+//! ### Connecting stack graph nodes with edges
+//!
+//! To connect two stack graph nodes, use the `edge` statement to add an edge between them:
+//!
+//! ``` skip
+//! @func [FunctionDefinition [FunctionName @id [Identifier]]] {
+//! node def
+//! attr (def) type = "pop_symbol", symbol = (source-text @id), source_node = @func, is_definition
+//! node body
+//! edge def -> body
+//! }
+//! ```
+//!
+//! To implement shadowing (which determines which definitions are selected when multiple are available),
+//! you can add a `precedence` attribute to each edge to indicate which paths are prioritized:
+//!
+//! ``` skip
+//! @func [FunctionDefinition [FunctionName @id [Identifier]]] {
+//! node def
+//! attr (def) type = "pop_symbol", symbol = (source-text @id), source_node = @func, is_definition
+//! node body
+//! edge def -> body
+//! attr (def -> body) precedence = 1
+//! }
+//! ```
+//!
+//! (If you don't specify a `precedence`, the default is 0.)
+//!
+//! ### Referring to the singleton nodes
+//!
+//! The _root node_ and _jump to scope node_ are singleton nodes that always exist for all stack
+//! graphs. You can refer to them using the `ROOT_NODE` and `JUMP_TO_SCOPE_NODE` global variables:
+//!
+//! ``` skip
+//! global ROOT_NODE
+//!
+//! @func [FunctionDefinition [FunctionName @id [Identifier]]] {
+//! node def
+//! attr (def) type = "pop_symbol", symbol = (source-text @id), source_node = @func, is_definition
+//! edge ROOT_NODE -> def
+//! }
+//! ```
+//!
+//! ### Attaching debug information to nodes
+//!
+//! It is possible to attach extra information to nodes for debugging purposes. This is done by adding
+//! `debug_*` attributes to nodes. Each attribute defines a debug entry, with the key derived from the
+//! attribute name, and the value the string representation of the attribute value. For example, mark
+//! a scope node with a kind as follows:
+//!
+//! ``` skip
+//! @func [FunctionDefinition [FunctionName @id [Identifier]]] {
+//! ; ...
+//! node param_scope
+//! attr (param_scope) debug_kind = "param_scope"
+//! ; ...
+//! }
+//! ```
+//!
+//! ### Other node attributes introduced in Slang's usage of stack-graphs
+//!
+//! #### `parents` attribute
+//!
+//! Is used to convey semantic hierarchy. Can be applied to both definitions and
+//! references. It's an optional, list of graph nodes attribute.
+//!
+//! For references it can indicate in which language context the reference
+//! occurs (eg. in which method or class). For definitions it can indicate the
+//! enclosing type of the definition, or parent classes in a class hierarchy.
+//! The parent handles themselves can refer to definitions or references. In the
+//! later case, generally speaking they will need to be resolved at resolution
+//! time in order to be useful.
+//!
+//! #### `extension_hook`, `extension_scope` and `inherit_extensions`
+//!
+//! These attributes enable the bindings API to resolve extension methods by
+//! injecting specific scopes at potentially unrelated (lexically speaking)
+//! nodes in the stack graph. Availability and application of extension scopes
+//! depend on the call site (ie. the reference node). Thus, the extension scope
+//! to (potentially) apply when resolving a reference is computed by looking up
+//! the `parents` of the reference and then querying those parent nodes for
+//! their `extension_scope` (an optional scope node). Any extension providing
+//! node can also have the `inherit_extensions` attribute (a boolean) which
+//! indicates that the algorithm should recurse and resolve its parents to
+//! further look for other extensions scopes.
+//!
+//! Finally, the attribute `extension_hook` defines where in the graph should
+//! these extension scopes be injected. This is typically the root lexical
+//! scope. This attribute applies to any scope node and is boolean.
+//!
+
+mod cancellation;
+mod functions;
+
+use std::collections::{HashMap, HashSet};
+
+pub use cancellation::{CancellationFlag, NoCancellation};
+pub use functions::default_functions;
+use metaslang_cst::cursor::Cursor;
+use metaslang_cst::kinds::KindTypes;
+use metaslang_graph_builder::ast::File as GraphBuilderFile;
+use metaslang_graph_builder::functions::Functions;
+use metaslang_graph_builder::graph::{Edge, Graph, GraphNode, GraphNodeRef, Value};
+use metaslang_graph_builder::{ExecutionConfig, ExecutionError, Variables};
+use once_cell::sync::Lazy;
+use stack_graphs::arena::Handle;
+use stack_graphs::graph::{File, Node, NodeID, StackGraph};
+use thiserror::Error;
+
+use crate::builder::{DefinitionBindingInfo, ReferenceBindingInfo};
+
+// Node type values
+static DROP_SCOPES_TYPE: &str = "drop_scopes";
+static POP_SCOPED_SYMBOL_TYPE: &str = "pop_scoped_symbol";
+static POP_SYMBOL_TYPE: &str = "pop_symbol";
+static PUSH_SCOPED_SYMBOL_TYPE: &str = "push_scoped_symbol";
+static PUSH_SYMBOL_TYPE: &str = "push_symbol";
+static SCOPE_TYPE: &str = "scope";
+
+// Node attribute names
+static DEBUG_ATTR_PREFIX: &str = "debug_";
+static DEFINIENS_NODE_ATTR: &str = "definiens_node";
+static EMPTY_SOURCE_SPAN_ATTR: &str = "empty_source_span";
+static IS_DEFINITION_ATTR: &str = "is_definition";
+static IS_ENDPOINT_ATTR: &str = "is_endpoint";
+static IS_EXPORTED_ATTR: &str = "is_exported";
+static IS_REFERENCE_ATTR: &str = "is_reference";
+static EXTENSION_HOOK_ATTR: &str = "extension_hook";
+static EXTENSION_SCOPE_ATTR: &str = "extension_scope";
+static INHERIT_EXTENSIONS_ATTR: &str = "inherit_extensions";
+static PARENTS_ATTR: &str = "parents";
+static SCOPE_ATTR: &str = "scope";
+static SOURCE_NODE_ATTR: &str = "source_node";
+static SYMBOL_ATTR: &str = "symbol";
+static SYNTAX_TYPE_ATTR: &str = "syntax_type";
+static TYPE_ATTR: &str = "type";
+
+// Expected attributes per node type
+static POP_SCOPED_SYMBOL_ATTRS: Lazy> = Lazy::new(|| {
+ HashSet::from([
+ TYPE_ATTR,
+ SYMBOL_ATTR,
+ IS_DEFINITION_ATTR,
+ DEFINIENS_NODE_ATTR,
+ PARENTS_ATTR,
+ SYNTAX_TYPE_ATTR,
+ EXTENSION_SCOPE_ATTR,
+ INHERIT_EXTENSIONS_ATTR,
+ ])
+});
+static POP_SYMBOL_ATTRS: Lazy> = Lazy::new(|| {
+ HashSet::from([
+ TYPE_ATTR,
+ SYMBOL_ATTR,
+ IS_DEFINITION_ATTR,
+ DEFINIENS_NODE_ATTR,
+ PARENTS_ATTR,
+ SYNTAX_TYPE_ATTR,
+ EXTENSION_SCOPE_ATTR,
+ INHERIT_EXTENSIONS_ATTR,
+ ])
+});
+static PUSH_SCOPED_SYMBOL_ATTRS: Lazy> = Lazy::new(|| {
+ HashSet::from([
+ TYPE_ATTR,
+ SYMBOL_ATTR,
+ SCOPE_ATTR,
+ IS_REFERENCE_ATTR,
+ PARENTS_ATTR,
+ ])
+});
+static PUSH_SYMBOL_ATTRS: Lazy> =
+ Lazy::new(|| HashSet::from([TYPE_ATTR, SYMBOL_ATTR, IS_REFERENCE_ATTR, PARENTS_ATTR]));
+static SCOPE_ATTRS: Lazy> = Lazy::new(|| {
+ HashSet::from([
+ TYPE_ATTR,
+ IS_EXPORTED_ATTR,
+ IS_ENDPOINT_ATTR,
+ EXTENSION_HOOK_ATTR,
+ ])
+});
+
+// Edge attribute names
+static PRECEDENCE_ATTR: &str = "precedence";
+
+// Global variables
+/// Name of the variable used to pass the root node.
+pub const ROOT_NODE_VAR: &str = "ROOT_NODE";
+/// Name of the variable used to pass the jump to scope node.
+pub const JUMP_TO_SCOPE_NODE_VAR: &str = "JUMP_TO_SCOPE_NODE";
+/// Name of the variable used to pass the file path.
+pub const FILE_PATH_VAR: &str = "FILE_PATH";
+
+pub(crate) struct Loader<'a, KT: KindTypes + 'static> {
+ msgb: &'a GraphBuilderFile,
+ functions: &'a Functions,
+ stack_graph: &'a mut StackGraph,
+ file: Handle,
+ tree_cursor: Cursor,
+ graph: Graph,
+ remapped_nodes: HashMap,
+ injected_node_count: usize,
+ cursors: HashMap, Cursor>,
+ definitions_info: HashMap, DefinitionBindingInfo>,
+ references_info: HashMap, ReferenceBindingInfo>,
+ extension_hooks: HashSet>,
+}
+
+pub(crate) struct LoadResult {
+ #[cfg(feature = "__private_testing_utils")]
+ pub graph: Graph,
+ pub cursors: HashMap, Cursor>,
+ pub definitions_info: HashMap, DefinitionBindingInfo>,
+ pub references_info: HashMap, ReferenceBindingInfo>,
+ // Nodes where we want to inject extensions
+ pub extension_hooks: HashSet>,
+}
+
+impl<'a, KT: KindTypes + 'static> Loader<'a, KT> {
+ pub fn new(
+ msgb: &'a GraphBuilderFile,
+ functions: &'a Functions,
+ stack_graph: &'a mut StackGraph,
+ file: Handle,
+ tree_cursor: Cursor,
+ ) -> Self {
+ Loader {
+ msgb,
+ functions,
+ stack_graph,
+ file,
+ tree_cursor,
+ graph: Graph::new(),
+ remapped_nodes: HashMap::new(),
+ injected_node_count: 0,
+ cursors: HashMap::new(),
+ definitions_info: HashMap::new(),
+ references_info: HashMap::new(),
+ extension_hooks: HashSet::new(),
+ }
+ }
+
+ fn build_global_variables(&mut self) -> Variables<'a> {
+ let mut variables = Variables::new();
+ let file_path = self.stack_graph[self.file].name();
+ variables
+ .add(FILE_PATH_VAR.into(), file_path.into())
+ .expect("Failed to add FILE_PATH variable");
+
+ let root_node = self.inject_node(NodeID::root());
+ variables
+ .add(ROOT_NODE_VAR.into(), root_node.into())
+ .expect("Failed to set ROOT_NODE");
+
+ let jump_to_scope_node = self.inject_node(NodeID::jump_to());
+ variables
+ .add(JUMP_TO_SCOPE_NODE_VAR.into(), jump_to_scope_node.into())
+ .expect("Failed to set JUMP_TO_SCOPE_NODE");
+
+ #[cfg(feature = "__private_testing_utils")]
+ {
+ // For debugging purposes only
+ self.graph[root_node]
+ .attributes
+ .add(
+ [DEBUG_ATTR_PREFIX, "msgb_variable"]
+ .concat()
+ .as_str()
+ .into(),
+ ROOT_NODE_VAR.to_string(),
+ )
+ .expect("Failed to set ROOT_NODE variable name for debugging");
+
+ self.graph[jump_to_scope_node]
+ .attributes
+ .add(
+ [DEBUG_ATTR_PREFIX, "msgb_variable"]
+ .concat()
+ .as_str()
+ .into(),
+ JUMP_TO_SCOPE_NODE_VAR.to_string(),
+ )
+ .expect("Failed to set JUMP_TO_SCOPE_NODE variable name for debugging");
+ }
+
+ variables
+ }
+
+ /// Executes this loader.
+ pub fn execute(
+ mut self,
+ cancellation_flag: &dyn CancellationFlag,
+ ) -> Result, BuildError> {
+ let variables = self.build_global_variables();
+
+ let config = ExecutionConfig::new(self.functions, &variables)
+ .lazy(true)
+ // .debug_attributes(
+ // [DEBUG_ATTR_PREFIX, "msgb_location"]
+ // .concat()
+ // .as_str()
+ // .into(),
+ // [DEBUG_ATTR_PREFIX, "msgb_variable"]
+ // .concat()
+ // .as_str()
+ // .into(),
+ // [DEBUG_ATTR_PREFIX, "msgb_match_node"]
+ // .concat()
+ // .as_str()
+ // .into(),
+ // );
+ ;
+
+ self.msgb.execute_into(
+ &mut self.graph,
+ &self.tree_cursor,
+ &config,
+ &(cancellation_flag as &dyn CancellationFlag),
+ )?;
+
+ self.load(cancellation_flag)?;
+
+ Ok(LoadResult {
+ #[cfg(feature = "__private_testing_utils")]
+ graph: self.graph,
+ cursors: self.cursors,
+ definitions_info: self.definitions_info,
+ references_info: self.references_info,
+ extension_hooks: self.extension_hooks,
+ })
+ }
+
+ /// Create a graph node to represent the stack graph node. It is the callers responsibility to
+ /// ensure the stack graph node exists.
+ pub fn inject_node(&mut self, id: NodeID) -> GraphNodeRef {
+ let node = self.graph.add_graph_node();
+ self.remapped_nodes.insert(node.index(), id);
+ self.injected_node_count += 1;
+ node
+ }
+}
+
+/// An error that can occur while loading a stack graph from a TSG file
+#[derive(Debug, Error)]
+pub enum BuildError {
+ #[error("{0}")]
+ Cancelled(&'static str),
+ #[error("Missing ‘symbol’ attribute on graph node")]
+ MissingSymbol(GraphNodeRef),
+ #[error("Missing ‘scope’ attribute on graph node")]
+ MissingScope(GraphNodeRef),
+ #[error("Missing ‘definiens’ attribute on graph node")]
+ MissingDefiniens(GraphNodeRef),
+ #[error("Unknown ‘{0}’ flag type {1}")]
+ UnknownFlagType(String, String),
+ #[error("Unknown node type {0}")]
+ UnknownNodeType(String),
+ #[error("Unknown symbol type {0}")]
+ UnknownSymbolType(String),
+ #[error(transparent)]
+ ExecutionError(ExecutionError),
+ #[error("Expected exported symbol scope in {0}, got {1}")]
+ SymbolScopeError(String, String),
+ #[error("Parent must be either a reference or definition")]
+ InvalidParent(GraphNodeRef),
+}
+
+impl From for BuildError {
+ fn from(value: stack_graphs::CancellationError) -> Self {
+ Self::Cancelled(value.0)
+ }
+}
+
+impl From for BuildError {
+ fn from(value: ExecutionError) -> Self {
+ match value {
+ ExecutionError::Cancelled(err) => Self::Cancelled(err.0),
+ err => Self::ExecutionError(err),
+ }
+ }
+}
+
+impl<'a, KT: KindTypes + 'static> Loader<'a, KT> {
+ fn load(&mut self, cancellation_flag: &dyn CancellationFlag) -> Result<(), BuildError> {
+ let cancellation_flag: &dyn stack_graphs::CancellationFlag = &cancellation_flag;
+
+ // By default graph ids are used for stack graph local_ids. A remapping is computed
+ // for local_ids that already exist in the graph---all other graph ids are mapped to
+ // the same local_id. See [`self.node_id_for_index`] for more details.
+ let mut next_local_id = u32::try_from(self.graph.node_count() - self.injected_node_count)
+ .expect("nodes local_id to fit in u32");
+ for node in self.stack_graph.nodes_for_file(self.file) {
+ let local_id = self.stack_graph[node].id().local_id();
+ let index = (local_id as usize) + self.injected_node_count;
+ // find next available local_id for which no stack graph node exists yet
+ while self
+ .stack_graph
+ .node_for_id(NodeID::new_in_file(self.file, next_local_id))
+ .is_some()
+ {
+ next_local_id += 1;
+ }
+ // remap graph node index to the available stack graph node local_id
+ if self
+ .remapped_nodes
+ .insert(index, NodeID::new_in_file(self.file, next_local_id))
+ .is_some()
+ {
+ panic!("index already remapped");
+ }
+ }
+
+ // First create a stack graph node for each MSGB node. (The skip(...) is because the first
+ // DSL nodes that we create are the proxies for the injected stack graph nodes.)
+ for node_ref in self.graph.iter_nodes().skip(self.injected_node_count) {
+ cancellation_flag.check("loading graph nodes")?;
+ let node_type = self.get_node_type(node_ref)?;
+ let handle = match node_type {
+ NodeType::DropScopes => self.load_drop_scopes(node_ref),
+ NodeType::PopScopedSymbol => self.load_pop_scoped_symbol(node_ref)?,
+ NodeType::PopSymbol => self.load_pop_symbol(node_ref)?,
+ NodeType::PushScopedSymbol => self.load_push_scoped_symbol(node_ref)?,
+ NodeType::PushSymbol => self.load_push_symbol(node_ref)?,
+ NodeType::Scope => self.load_scope(node_ref)?,
+ };
+ self.load_source_info(node_ref, handle)?;
+ self.load_node_debug_info(node_ref, handle);
+ }
+
+ // Iterate again to resolve parents attribute, which refers to other nodes in the graph
+ for node_ref in self.graph.iter_nodes().skip(self.injected_node_count) {
+ cancellation_flag.check("loading graph nodes additional info")?;
+ self.load_additional_info(node_ref)?;
+ }
+
+ for node in self.stack_graph.nodes_for_file(self.file) {
+ self.verify_node(node)?;
+ }
+
+ // Then add stack graph edges for each TSG edge. Note that we _don't_ skip(...) here because
+ // there might be outgoing nodes from the “root” node that we need to process.
+ // (Technically the caller could add outgoing nodes from “jump to scope” as well, but those
+ // are invalid according to the stack graph semantics and will never be followed.
+ for source_ref in self.graph.iter_nodes() {
+ let source = &self.graph[source_ref];
+ let source_node_id = self.node_id_for_graph_node(source_ref);
+ let source_handle = self.stack_graph.node_for_id(source_node_id).unwrap();
+ for (sink_ref, edge) in source.iter_edges() {
+ cancellation_flag.check("loading graph edges")?;
+ let precedence = match edge.attributes.get(PRECEDENCE_ATTR) {
+ Some(precedence) => precedence.as_integer()?,
+ None => 0,
+ }
+ .try_into()
+ .map_err(|_| ExecutionError::ExpectedInteger("integer does not fit".to_string()))?;
+ let sink_node_id = self.node_id_for_graph_node(sink_ref);
+ let sink_handle = self.stack_graph.node_for_id(sink_node_id).unwrap();
+ self.stack_graph
+ .add_edge(source_handle, sink_handle, precedence);
+ Self::load_edge_debug_info(self.stack_graph, source_handle, sink_handle, edge);
+ }
+ }
+
+ Ok(())
+ }
+
+ fn get_node_type(&self, node_ref: GraphNodeRef) -> Result {
+ let node = &self.graph[node_ref];
+ let node_type = match node.attributes.get(TYPE_ATTR) {
+ Some(node_type) => node_type.as_str()?,
+ None => return Ok(NodeType::Scope),
+ };
+ if node_type == DROP_SCOPES_TYPE {
+ Ok(NodeType::DropScopes)
+ } else if node_type == POP_SCOPED_SYMBOL_TYPE {
+ Ok(NodeType::PopScopedSymbol)
+ } else if node_type == POP_SYMBOL_TYPE {
+ Ok(NodeType::PopSymbol)
+ } else if node_type == PUSH_SCOPED_SYMBOL_TYPE {
+ Ok(NodeType::PushScopedSymbol)
+ } else if node_type == PUSH_SYMBOL_TYPE {
+ Ok(NodeType::PushSymbol)
+ } else if node_type == SCOPE_TYPE {
+ Ok(NodeType::Scope)
+ } else {
+ Err(BuildError::UnknownNodeType(node_type.to_string()))
+ }
+ }
+
+ fn verify_node(&self, node: Handle) -> Result<(), BuildError> {
+ if let Node::PushScopedSymbol(node) = &self.stack_graph[node] {
+ let scope = &self.stack_graph[self.stack_graph.node_for_id(node.scope).unwrap()];
+ if !scope.is_exported_scope() {
+ return Err(BuildError::SymbolScopeError(
+ format!("{}", node.display(self.stack_graph)),
+ format!("{}", scope.display(self.stack_graph)),
+ ));
+ }
+ }
+ Ok(())
+ }
+}
+
+enum NodeType {
+ DropScopes,
+ PopSymbol,
+ PopScopedSymbol,
+ PushSymbol,
+ PushScopedSymbol,
+ Scope,
+}
+
+impl<'a, KT: KindTypes> Loader<'a, KT> {
+ /// Get the `NodeID` corresponding to a `Graph` node.
+ ///
+ /// By default, graph nodes get their index shifted by [`self.injected_node_count`] as their
+ /// `local_id`, unless they have a corresponding entry in the [`self.remapped_nodes`] map. This
+ /// is the case if:
+ /// 1. The node was injected, in which case it is mapped to the `NodeID` of the injected node.
+ /// 2. The node's default `local_id` clashes with a preexisting node, in which case it is mapped to
+ /// an available `local_id` beyond the range of default `local_ids`.
+ fn node_id_for_graph_node(&self, node_ref: GraphNodeRef) -> NodeID {
+ let index = node_ref.index();
+ self.remapped_nodes.get(&index).map_or_else(
+ || {
+ NodeID::new_in_file(
+ self.file,
+ u32::try_from(index - self.injected_node_count)
+ .expect("local_id to fit in u32"),
+ )
+ },
+ |id| *id,
+ )
+ }
+
+ fn load_drop_scopes(&mut self, node_ref: GraphNodeRef) -> Handle {
+ let id = self.node_id_for_graph_node(node_ref);
+ self.stack_graph.add_drop_scopes_node(id).unwrap()
+ }
+
+ fn load_pop_scoped_symbol(
+ &mut self,
+ node_ref: GraphNodeRef,
+ ) -> Result, BuildError> {
+ let node = &self.graph[node_ref];
+ let symbol = match node.attributes.get(SYMBOL_ATTR) {
+ Some(symbol) => Self::load_symbol(symbol)?,
+ None => return Err(BuildError::MissingSymbol(node_ref)),
+ };
+ let symbol = self.stack_graph.add_symbol(&symbol);
+ let id = self.node_id_for_graph_node(node_ref);
+ let is_definition = Self::load_flag(node, IS_DEFINITION_ATTR)?;
+ Self::verify_attributes(node, POP_SCOPED_SYMBOL_TYPE, &POP_SCOPED_SYMBOL_ATTRS);
+ let node_handle = self
+ .stack_graph
+ .add_pop_scoped_symbol_node(id, symbol, is_definition)
+ .unwrap();
+ Ok(node_handle)
+ }
+
+ fn load_pop_symbol(&mut self, node_ref: GraphNodeRef) -> Result, BuildError> {
+ let node = &self.graph[node_ref];
+ let symbol = match node.attributes.get(SYMBOL_ATTR) {
+ Some(symbol) => Self::load_symbol(symbol)?,
+ None => return Err(BuildError::MissingSymbol(node_ref)),
+ };
+ let symbol = self.stack_graph.add_symbol(&symbol);
+ let id = self.node_id_for_graph_node(node_ref);
+ let is_definition = Self::load_flag(node, IS_DEFINITION_ATTR)?;
+ Self::verify_attributes(node, POP_SYMBOL_TYPE, &POP_SYMBOL_ATTRS);
+ let node_handle = self
+ .stack_graph
+ .add_pop_symbol_node(id, symbol, is_definition)
+ .unwrap();
+ Ok(node_handle)
+ }
+
+ fn load_push_scoped_symbol(
+ &mut self,
+ node_ref: GraphNodeRef,
+ ) -> Result, BuildError> {
+ let node = &self.graph[node_ref];
+ let symbol = match node.attributes.get(SYMBOL_ATTR) {
+ Some(symbol) => Self::load_symbol(symbol)?,
+ None => return Err(BuildError::MissingSymbol(node_ref)),
+ };
+ let symbol = self.stack_graph.add_symbol(&symbol);
+ let id = self.node_id_for_graph_node(node_ref);
+ let scope = match node.attributes.get(SCOPE_ATTR) {
+ Some(scope) => self.node_id_for_graph_node(scope.as_graph_node_ref()?),
+ None => return Err(BuildError::MissingScope(node_ref)),
+ };
+ let is_reference = Self::load_flag(node, IS_REFERENCE_ATTR)?;
+ Self::verify_attributes(node, PUSH_SCOPED_SYMBOL_TYPE, &PUSH_SCOPED_SYMBOL_ATTRS);
+ Ok(self
+ .stack_graph
+ .add_push_scoped_symbol_node(id, symbol, scope, is_reference)
+ .unwrap())
+ }
+
+ fn load_push_symbol(&mut self, node_ref: GraphNodeRef) -> Result, BuildError> {
+ let node = &self.graph[node_ref];
+ let symbol = match node.attributes.get(SYMBOL_ATTR) {
+ Some(symbol) => Self::load_symbol(symbol)?,
+ None => return Err(BuildError::MissingSymbol(node_ref)),
+ };
+ let symbol = self.stack_graph.add_symbol(&symbol);
+ let id = self.node_id_for_graph_node(node_ref);
+ let is_reference = Self::load_flag(node, IS_REFERENCE_ATTR)?;
+ Self::verify_attributes(node, PUSH_SYMBOL_TYPE, &PUSH_SYMBOL_ATTRS);
+ Ok(self
+ .stack_graph
+ .add_push_symbol_node(id, symbol, is_reference)
+ .unwrap())
+ }
+
+ fn load_scope(&mut self, node_ref: GraphNodeRef) -> Result, BuildError> {
+ let node = &self.graph[node_ref];
+ let id = self.node_id_for_graph_node(node_ref);
+ let is_exported =
+ Self::load_flag(node, IS_EXPORTED_ATTR)? || Self::load_flag(node, IS_ENDPOINT_ATTR)?;
+ Self::verify_attributes(node, SCOPE_TYPE, &SCOPE_ATTRS);
+ Ok(self.stack_graph.add_scope_node(id, is_exported).unwrap())
+ }
+
+ fn load_symbol(value: &Value) -> Result {
+ match value {
+ Value::Integer(i) => Ok(i.to_string()),
+ Value::String(s) => Ok(s.clone()),
+ _ => Err(BuildError::UnknownSymbolType(value.to_string())),
+ }
+ }
+
+ fn load_flag(node: &GraphNode, attribute: &str) -> Result {
+ match node.attributes.get(attribute) {
+ Some(value) => value
+ .as_boolean()
+ .map_err(|_| BuildError::UnknownFlagType(attribute.to_string(), value.to_string())),
+ None => Ok(false),
+ }
+ }
+
+ fn load_source_info(
+ &mut self,
+ node_ref: GraphNodeRef,
+ node_handle: Handle,
+ ) -> Result<(), BuildError> {
+ let node = &self.graph[node_ref];
+
+ // For every added graph node which links to a corresponding source
+ // node, save the corresponding CST cursor so our caller can extract
+ // that info later.
+ if let Some(source_node) = node.attributes.get(SOURCE_NODE_ATTR) {
+ let syntax_node_ref = source_node.as_syntax_node_ref()?;
+ let source_node = &self.graph[syntax_node_ref];
+ self.cursors.insert(node_handle, source_node.clone());
+ }
+
+ if let Some(syntax_type) = node.attributes.get(SYNTAX_TYPE_ATTR) {
+ let syntax_type = syntax_type.as_str()?;
+ let syntax_type = self.stack_graph.add_string(syntax_type);
+ let source_info = self.stack_graph.source_info_mut(node_handle);
+ source_info.syntax_type = syntax_type.into();
+ }
+
+ Ok(())
+ }
+
+ fn node_handle_for_graph_node(&self, node_ref: GraphNodeRef) -> Handle {
+ self.stack_graph
+ .node_for_id(self.node_id_for_graph_node(node_ref))
+ .expect("parent node exists in the stack graph")
+ }
+
+ // Saves additional binding information from the loaded graph (eg. tag,
+ // definiens, import/export nodes and parents).
+ fn load_additional_info(&mut self, node_ref: GraphNodeRef) -> Result<(), BuildError> {
+ let node = &self.graph[node_ref];
+ let node_handle = self.node_handle_for_graph_node(node_ref);
+ let stack_graph_node = &self.stack_graph[node_handle];
+
+ let parents = match node.attributes.get(PARENTS_ATTR) {
+ Some(parents) => {
+ parents
+ .as_list()?
+ .iter()
+ .flat_map(|value| {
+ value
+ .as_graph_node_ref()
+ .map(|id| self.node_handle_for_graph_node(id))
+ })
+ .flat_map(|parent| {
+ // ensure parents are either definitions or references
+ let parent_node = &self.stack_graph[parent];
+ if !parent_node.is_definition() && !parent_node.is_reference() {
+ Err(BuildError::InvalidParent(node_ref))
+ } else {
+ Ok(parent)
+ }
+ })
+ .collect()
+ }
+ None => Vec::new(),
+ };
+
+ if stack_graph_node.is_definition() {
+ let definiens = match node.attributes.get(DEFINIENS_NODE_ATTR) {
+ Some(definiens_node) => {
+ let syntax_node_ref = definiens_node.as_syntax_node_ref()?;
+ let definiens_node = &self.graph[syntax_node_ref];
+ definiens_node.clone()
+ }
+ None => return Err(BuildError::MissingDefiniens(node_ref)),
+ };
+
+ let extension_scope = match node.attributes.get(EXTENSION_SCOPE_ATTR) {
+ Some(extension_scope) => {
+ Some(self.node_handle_for_graph_node(extension_scope.as_graph_node_ref()?))
+ }
+ None => None,
+ };
+
+ let inherit_extensions = Self::load_flag(node, INHERIT_EXTENSIONS_ATTR)?;
+
+ self.definitions_info.insert(
+ node_handle,
+ DefinitionBindingInfo {
+ definiens,
+ parents,
+ extension_scope,
+ inherit_extensions,
+ },
+ );
+ } else if stack_graph_node.is_reference() {
+ self.references_info
+ .insert(node_handle, ReferenceBindingInfo { parents });
+ }
+
+ if Self::load_flag(node, EXTENSION_HOOK_ATTR)? {
+ self.extension_hooks.insert(node_handle);
+ }
+
+ Ok(())
+ }
+
+ fn load_node_debug_info(&mut self, node_ref: GraphNodeRef, node_handle: Handle) {
+ let node = &self.graph[node_ref];
+ for (name, value) in node.attributes.iter() {
+ let name = name.to_string();
+ if let Some(name_without_prefix) = name.strip_prefix(DEBUG_ATTR_PREFIX) {
+ let value = match value {
+ Value::String(value) => value.clone(),
+ value => value.to_string(),
+ };
+ let key = self.stack_graph.add_string(name_without_prefix);
+ let value = self.stack_graph.add_string(&value);
+ self.stack_graph
+ .node_debug_info_mut(node_handle)
+ .add(key, value);
+ }
+ }
+ }
+
+ fn load_edge_debug_info(
+ stack_graph: &mut StackGraph,
+ source_handle: Handle,
+ sink_handle: Handle,
+ edge: &Edge,
+ ) {
+ for (name, value) in edge.attributes.iter() {
+ let name = name.to_string();
+ if let Some(name_without_prefix) = name.strip_prefix(DEBUG_ATTR_PREFIX) {
+ let value = match value {
+ Value::String(value) => value.clone(),
+ value => value.to_string(),
+ };
+ let key = stack_graph.add_string(name_without_prefix);
+ let value = stack_graph.add_string(&value);
+ stack_graph
+ .edge_debug_info_mut(source_handle, sink_handle)
+ .add(key, value);
+ }
+ }
+ }
+
+ fn verify_attributes(
+ node: &GraphNode,
+ node_type: &str,
+ allowed_attributes: &HashSet<&'static str>,
+ ) {
+ for (id, _) in node.attributes.iter() {
+ let id = id.as_str();
+ if !allowed_attributes.contains(id)
+ && id != SOURCE_NODE_ATTR
+ && id != EMPTY_SOURCE_SPAN_ATTR
+ && !id.starts_with(DEBUG_ATTR_PREFIX)
+ {
+ eprintln!("Unexpected attribute {id} on node of type {node_type}");
+ }
+ }
+ }
+}
diff --git a/crates/metaslang/bindings/src/builder/mod.rs b/crates/metaslang/bindings/src/builder/mod.rs
index 77943da877..21bdb1609b 100644
--- a/crates/metaslang/bindings/src/builder/mod.rs
+++ b/crates/metaslang/bindings/src/builder/mod.rs
@@ -1,985 +1,233 @@
-// -*- coding: utf-8 -*-
-// ------------------------------------------------------------------------------------------------
-// Copyright © 2021, stack-graphs authors.
-// Copyright © 2024, slang authors.
-// Licensed under MIT license
-// Please see the LICENSE file in the root of this crate for license details.
-// ------------------------------------------------------------------------------------------------
-
-//! This module lets you construct [stack graphs][] using this crate's [graph construction DSL][].
-//! The graph DSL lets you construct arbitrary graph structures from the parsed syntax tree of a
-//! source file. If you construct a graph using the vocabulary of attributes described below, then
-//! the result of executing the graph DSL will be a valid stack graph, which we can then use for
-//! name binding lookups.
-//!
-//! ## Prerequisites
-//!
-//! [stack graphs]: https://docs.rs/stack-graphs/*/
-//! [graph construction DSL]: https://docs.rs/metaslang_graph_builder/*/
-//!
-//! To process a particular source language, you'll need to first get the CST from the source, using
-//! the parser constructed from the language definition that uses the `metaslang_cst` crate.
-//!
-//! You will then need to create _stack graph construction rules_ for your language. These rules
-//! are implemented using metaslang's [graph construction DSL][], which is based from tree-sitter's
-//! graph construction DSL. They define the particular stack graph nodes and edges that should be
-//! created for each part of the parsed syntax tree of a source file.
-//!
-//! ## Graph DSL vocabulary
-//!
-//! **Please note**: This documentation assumes you are already familiar with stack graphs, and how
-//! to use different stack graph node types, and the connectivity between nodes, to implement the
-//! name binding semantics of your language. We assume that you know what kind of stack graph you
-//! want to produce; this documentation focuses only on the mechanics of _how_ to create that stack
-//! graph content.
-//!
-//! As mentioned above, your stack graph construction rules should create stack graph nodes and
-//! edges from the parsed content of a source file. You will use MSGB [stanzas][] to match on
-//! different parts of the parsed syntax tree, and create stack graph content for each match.
-//!
-//! ### Creating stack graph nodes
-//!
-//! To create a stack graph node for each identifier in a Solidity file, you could use the following
-//! MSGB stanza:
-//!
-//! ``` skip
-//! [Identifier] {
-//! node new_node
-//! }
-//! ```
-//!
-//! (Here, `node` is a MSGB statement that creates a new node, and `new_node` is the name of a local
-//! variable that the new node is assigned to, letting you refer to the new node in the rest of the
-//! stanza.)
-//!
-//! [stanzas]: https://docs.rs/tree-sitter-graph/*/tree_sitter_graph/reference/index.html#high-level-structure
-//!
-//! By default, this new node will be a _scope node_. If you need to create a different kind of stack
-//! graph node, set the `type` attribute on the new node:
-//!
-//! ``` skip
-//! [Identifier] {
-//! node new_node
-//! attr (new_node) type = "push_symbol"
-//! }
-//! ```
-//!
-//! The valid `type` values are:
-//!
-//! - `drop_scopes`: a _drop scopes_ node
-//! - `pop_symbol`: a _pop symbol_ node
-//! - `pop_scoped_symbol`: a _pop scoped symbol_ node
-//! - `push_symbol`: a _push symbol_ node
-//! - `push_scoped_symbol`: a _push scoped symbol_ node
-//! - `scope`: a _scope_ node
-//!
-//! A node without an explicit `type` attribute is assumed to be of type `scope`.
-//!
-//! Certain node types — `pop_symbol`, `pop_scoped_symbol`, `push_symbol` and `push_scoped_symbol` —
-//! also require you to provide a `symbol` attribute. Its value must be a string, but will typically
-//! come from the content of a parsed syntax node using the [`source-text`][] function and a syntax
-//! capture:
-//!
-//! [`source-text`]: https://docs.rs/tree-sitter-graph/*/tree_sitter_graph/reference/functions/index.html#source-text
-//!
-//! ``` skip
-//! @id [Identifier] {
-//! node new_node
-//! attr (new_node) type = "push_symbol", symbol = (source-text @id)
-//! }
-//! ```
-//!
-//! Node types `pop_symbol` and `pop_scoped_symbol` allow an optional `is_definition` attribute,
-//! which marks that node as a proper definition. Node types `push_symbol` and `push_scoped_symbol`
-//! allow an optional `is_reference` attribute, which marks the node as a proper reference. When
-//! `is_definition` or `is_reference` are set, the `source_node` attribute is required.
-//!
-//! ``` skip
-//! @id [Identifier] {
-//! node new_node
-//! attr (new_node) type = "push_symbol", symbol = (source-text @id), is_reference, source_node = @id
-//! }
-//! ```
-//!
-//! A _push scoped symbol_ node requires a `scope` attribute. Its value must be a reference to an
-//! `exported` node that you've already created. (This is the exported scope node that will be
-//! pushed onto the scope stack.) For instance:
-//!
-//! ``` skip
-//! @id [Identifier] {
-//! node new_exported_scope_node
-//! attr (new_exported_scope_node) is_exported
-//! node new_push_scoped_symbol_node
-//! attr (new_push_scoped_symbol_node)
-//! type = "push_scoped_symbol",
-//! symbol = (source-text @id),
-//! scope = new_exported_scope_node
-//! }
-//! ```
-//!
-//! Nodes of type `scope` allow an optional `is_exported` attribute, that is required to use the
-//! scope in a `push_scoped_symbol` node.
-//!
-//!
-//! ### Annotating nodes with location information
-//!
-//! You can annotate any stack graph node that you create with location information, identifying
-//! the portion of the source file that the node "belongs to". This is _required_ for definition
-//! and reference nodes, since the location information determines which parts of the source file
-//! the user can _click on_, and the _destination_ of any code navigation queries the user makes.
-//! To do this, add a `source_node` attribute, whose value is a syntax node capture:
-//!
-//! ``` skip
-//! @func [FunctionDefinition [FunctionName @id [Identifier]]] {
-//! node def
-//! attr (def) type = "pop_symbol", symbol = (source-text @id), source_node = @func, is_definition
-//! }
-//! ```
-//!
-//! Note how in this example, we use a different syntax node for the _target_ of the definition
-//! (the entirety of the function definition) and for the _name_ of the definition (the content of
-//! the function's `name`).
-//!
-//! Adding the `empty_source_span` attribute will use an empty source span located at the start of
-//! the span of the `source_node`. This can be useful when a proper reference or definition is
-//! desired, and thus `source_node` is required, but the span of the available source node is too
-//! large. For example, a module definition which is located at the start of the program, but does
-//! span the whole program:
-//!
-//! ``` skip
-//! @unit [SourceUnit] {
-//! ; ...
-//! node mod_def
-//! attr mod_def type = "pop_symbol", symbol = mod_name, is_definition, source_node = @unit, empty_source_span
-//! ; ...
-//! }
-//! ```
-//!
-//! ### Annotating nodes with syntax type information
-//!
-//! You can annotate any stack graph node with information about its syntax type. To do this, add a
-//! `syntax_type` attribute, whose value is a string indicating the syntax type.
-//!
-//! ``` skip
-//! @func [FunctionDefinition [FunctionName @id [Identifier]]] {
-//! node def
-//! ; ...
-//! attr (def) syntax_type = "function"
-//! }
-//! ```
-//!
-//! ### Annotating definitions with definiens information
-//!
-//! You cannot annotate definitions with a definiens, which is the thing the definition covers. For
-//! example, for a function definition, the definiens would be the function body. To do this, add a
-//! `definiens_node` attribute, whose value is a syntax node that spans the definiens.
-//!
-//! ``` skip
-//! @func [FunctionDefinition [FunctionName @id [Identifier]] @body [FunctionBody]] {
-//! node def
-//! ; ...
-//! attr (def) definiens_node = @body
-//! }
-//! ```
-//!
-//! Definiens are optional and setting them to `#null` explicitly is allowed.
-//!
-//! ### Connecting stack graph nodes with edges
-//!
-//! To connect two stack graph nodes, use the `edge` statement to add an edge between them:
-//!
-//! ``` skip
-//! @func [FunctionDefinition [FunctionName @id [Identifier]]] {
-//! node def
-//! attr (def) type = "pop_symbol", symbol = (source-text @id), source_node = @func, is_definition
-//! node body
-//! edge def -> body
-//! }
-//! ```
-//!
-//! To implement shadowing (which determines which definitions are selected when multiple are available),
-//! you can add a `precedence` attribute to each edge to indicate which paths are prioritized:
-//!
-//! ``` skip
-//! @func [FunctionDefinition [FunctionName @id [Identifier]]] {
-//! node def
-//! attr (def) type = "pop_symbol", symbol = (source-text @id), source_node = @func, is_definition
-//! node body
-//! edge def -> body
-//! attr (def -> body) precedence = 1
-//! }
-//! ```
-//!
-//! (If you don't specify a `precedence`, the default is 0.)
-//!
-//! ### Referring to the singleton nodes
-//!
-//! The _root node_ and _jump to scope node_ are singleton nodes that always exist for all stack
-//! graphs. You can refer to them using the `ROOT_NODE` and `JUMP_TO_SCOPE_NODE` global variables:
-//!
-//! ``` skip
-//! global ROOT_NODE
-//!
-//! @func [FunctionDefinition [FunctionName @id [Identifier]]] {
-//! node def
-//! attr (def) type = "pop_symbol", symbol = (source-text @id), source_node = @func, is_definition
-//! edge ROOT_NODE -> def
-//! }
-//! ```
-//!
-//! ### Attaching debug information to nodes
-//!
-//! It is possible to attach extra information to nodes for debugging purposes. This is done by adding
-//! `debug_*` attributes to nodes. Each attribute defines a debug entry, with the key derived from the
-//! attribute name, and the value the string representation of the attribute value. For example, mark
-//! a scope node with a kind as follows:
-//!
-//! ``` skip
-//! @func [FunctionDefinition [FunctionName @id [Identifier]]] {
-//! ; ...
-//! node param_scope
-//! attr (param_scope) debug_kind = "param_scope"
-//! ; ...
-//! }
-//! ```
-//!
-//! ### Other node attributes introduced in Slang's usage of stack-graphs
-//!
-//! #### `parents` attribute
-//!
-//! Is used to convey semantic hierarchy. Can be applied to both definitions and
-//! references. It's an optional, list of graph nodes attribute.
-//!
-//! For references it can indicate in which language context the reference
-//! occurs (eg. in which method or class). For definitions it can indicate the
-//! enclosing type of the definition, or parent classes in a class hierarchy.
-//! The parent handles themselves can refer to definitions or references. In the
-//! later case, generally speaking they will need to be resolved at resolution
-//! time in order to be useful.
-//!
-//! #### `extension_hook`, `extension_scope` and `inherit_extensions`
-//!
-//! These attributes enable the bindings API to resolve extension methods by
-//! injecting specific scopes at potentially unrelated (lexically speaking)
-//! nodes in the stack graph. Availability and application of extension scopes
-//! depend on the call site (ie. the reference node). Thus, the extension scope
-//! to (potentially) apply when resolving a reference is computed by looking up
-//! the `parents` of the reference and then querying those parent nodes for
-//! their `extension_scope` (an optional scope node). Any extension providing
-//! node can also have the `inherit_extensions` attribute (a boolean) which
-//! indicates that the algorithm should recurse and resolve its parents to
-//! further look for other extensions scopes.
-//!
-//! Finally, the attribute `extension_hook` defines where in the graph should
-//! these extension scopes be injected. This is typically the root lexical
-//! scope. This attribute applies to any scope node and is boolean.
-//!
-
-mod cancellation;
-mod functions;
+mod loader;
+mod resolver;
use std::collections::{HashMap, HashSet};
+use std::fmt::Debug;
+use std::rc::Rc;
-pub use cancellation::{CancellationFlag, NoCancellation};
-pub use functions::default_functions;
+use loader::{LoadResult, Loader};
use metaslang_cst::cursor::Cursor;
use metaslang_cst::kinds::KindTypes;
-use metaslang_graph_builder::ast::File as GraphBuilderFile;
+use metaslang_graph_builder::ast::File;
use metaslang_graph_builder::functions::Functions;
-use metaslang_graph_builder::graph::{Edge, Graph, GraphNode, GraphNodeRef, Value};
-use metaslang_graph_builder::{ExecutionConfig, ExecutionError, Variables};
-use once_cell::sync::Lazy;
-use stack_graphs::arena::Handle;
-use stack_graphs::graph::{File, Node, NodeID, StackGraph};
-use thiserror::Error;
-
-use crate::{DefinitionBindingInfo, ReferenceBindingInfo};
-
-// Node type values
-static DROP_SCOPES_TYPE: &str = "drop_scopes";
-static POP_SCOPED_SYMBOL_TYPE: &str = "pop_scoped_symbol";
-static POP_SYMBOL_TYPE: &str = "pop_symbol";
-static PUSH_SCOPED_SYMBOL_TYPE: &str = "push_scoped_symbol";
-static PUSH_SYMBOL_TYPE: &str = "push_symbol";
-static SCOPE_TYPE: &str = "scope";
-
-// Node attribute names
-static DEBUG_ATTR_PREFIX: &str = "debug_";
-static DEFINIENS_NODE_ATTR: &str = "definiens_node";
-static EMPTY_SOURCE_SPAN_ATTR: &str = "empty_source_span";
-static IS_DEFINITION_ATTR: &str = "is_definition";
-static IS_ENDPOINT_ATTR: &str = "is_endpoint";
-static IS_EXPORTED_ATTR: &str = "is_exported";
-static IS_REFERENCE_ATTR: &str = "is_reference";
-static EXTENSION_HOOK_ATTR: &str = "extension_hook";
-static EXTENSION_SCOPE_ATTR: &str = "extension_scope";
-static INHERIT_EXTENSIONS_ATTR: &str = "inherit_extensions";
-static PARENTS_ATTR: &str = "parents";
-static SCOPE_ATTR: &str = "scope";
-static SOURCE_NODE_ATTR: &str = "source_node";
-static SYMBOL_ATTR: &str = "symbol";
-static SYNTAX_TYPE_ATTR: &str = "syntax_type";
-static TYPE_ATTR: &str = "type";
-
-// Expected attributes per node type
-static POP_SCOPED_SYMBOL_ATTRS: Lazy> = Lazy::new(|| {
- HashSet::from([
- TYPE_ATTR,
- SYMBOL_ATTR,
- IS_DEFINITION_ATTR,
- DEFINIENS_NODE_ATTR,
- PARENTS_ATTR,
- SYNTAX_TYPE_ATTR,
- EXTENSION_SCOPE_ATTR,
- INHERIT_EXTENSIONS_ATTR,
- ])
-});
-static POP_SYMBOL_ATTRS: Lazy> = Lazy::new(|| {
- HashSet::from([
- TYPE_ATTR,
- SYMBOL_ATTR,
- IS_DEFINITION_ATTR,
- DEFINIENS_NODE_ATTR,
- PARENTS_ATTR,
- SYNTAX_TYPE_ATTR,
- EXTENSION_SCOPE_ATTR,
- INHERIT_EXTENSIONS_ATTR,
- ])
-});
-static PUSH_SCOPED_SYMBOL_ATTRS: Lazy> = Lazy::new(|| {
- HashSet::from([
- TYPE_ATTR,
- SYMBOL_ATTR,
- SCOPE_ATTR,
- IS_REFERENCE_ATTR,
- PARENTS_ATTR,
- ])
-});
-static PUSH_SYMBOL_ATTRS: Lazy> =
- Lazy::new(|| HashSet::from([TYPE_ATTR, SYMBOL_ATTR, IS_REFERENCE_ATTR, PARENTS_ATTR]));
-static SCOPE_ATTRS: Lazy> = Lazy::new(|| {
- HashSet::from([
- TYPE_ATTR,
- IS_EXPORTED_ATTR,
- IS_ENDPOINT_ATTR,
- EXTENSION_HOOK_ATTR,
- ])
-});
-
-// Edge attribute names
-static PRECEDENCE_ATTR: &str = "precedence";
-
-// Global variables
-/// Name of the variable used to pass the root node.
-pub const ROOT_NODE_VAR: &str = "ROOT_NODE";
-/// Name of the variable used to pass the jump to scope node.
-pub const JUMP_TO_SCOPE_NODE_VAR: &str = "JUMP_TO_SCOPE_NODE";
-/// Name of the variable used to pass the file path.
-pub const FILE_PATH_VAR: &str = "FILE_PATH";
-
-pub(crate) struct Builder<'a, KT: KindTypes + 'static> {
- msgb: &'a GraphBuilderFile,
- functions: &'a Functions,
- stack_graph: &'a mut StackGraph,
- file: Handle,
- tree_cursor: Cursor,
- graph: Graph,
- remapped_nodes: HashMap,
- injected_node_count: usize,
- cursors: HashMap, Cursor>,
- definitions_info: HashMap, DefinitionBindingInfo>,
- references_info: HashMap, ReferenceBindingInfo>,
- extension_hooks: HashSet>,
-}
-
-pub(crate) struct BuildResult {
- #[cfg(feature = "__private_testing_utils")]
- pub graph: Graph,
- pub cursors: HashMap, Cursor>,
- pub definitions_info: HashMap, DefinitionBindingInfo>,
- pub references_info: HashMap, ReferenceBindingInfo>,
- // Nodes where we want to inject extensions
- pub extension_hooks: HashSet>,
-}
-
-impl<'a, KT: KindTypes + 'static> Builder<'a, KT> {
- pub fn new(
- msgb: &'a GraphBuilderFile,
- functions: &'a Functions,
- stack_graph: &'a mut StackGraph,
- file: Handle,
- tree_cursor: Cursor,
- ) -> Self {
- Builder {
- msgb,
- functions,
- stack_graph,
- file,
- tree_cursor,
- graph: Graph::new(),
- remapped_nodes: HashMap::new(),
- injected_node_count: 0,
- cursors: HashMap::new(),
- definitions_info: HashMap::new(),
- references_info: HashMap::new(),
- extension_hooks: HashSet::new(),
- }
- }
+use resolver::Resolver;
+use semver::Version;
+use stack_graphs::graph::StackGraph;
- fn build_global_variables(&mut self) -> Variables<'a> {
- let mut variables = Variables::new();
- let file_path = self.stack_graph[self.file].name();
- variables
- .add(FILE_PATH_VAR.into(), file_path.into())
- .expect("Failed to add FILE_PATH variable");
-
- let root_node = self.inject_node(NodeID::root());
- variables
- .add(ROOT_NODE_VAR.into(), root_node.into())
- .expect("Failed to set ROOT_NODE");
-
- let jump_to_scope_node = self.inject_node(NodeID::jump_to());
- variables
- .add(JUMP_TO_SCOPE_NODE_VAR.into(), jump_to_scope_node.into())
- .expect("Failed to set JUMP_TO_SCOPE_NODE");
-
- #[cfg(feature = "__private_testing_utils")]
- {
- // For debugging purposes only
- self.graph[root_node]
- .attributes
- .add(
- [DEBUG_ATTR_PREFIX, "msgb_variable"]
- .concat()
- .as_str()
- .into(),
- ROOT_NODE_VAR.to_string(),
- )
- .expect("Failed to set ROOT_NODE variable name for debugging");
-
- self.graph[jump_to_scope_node]
- .attributes
- .add(
- [DEBUG_ATTR_PREFIX, "msgb_variable"]
- .concat()
- .as_str()
- .into(),
- JUMP_TO_SCOPE_NODE_VAR.to_string(),
- )
- .expect("Failed to set JUMP_TO_SCOPE_NODE variable name for debugging");
- }
-
- variables
- }
+pub(crate) type GraphHandle = stack_graphs::arena::Handle;
+pub(crate) type FileHandle = stack_graphs::arena::Handle;
+pub(crate) type CursorID = usize;
- /// Executes this builder.
- pub fn build(
- mut self,
- cancellation_flag: &dyn CancellationFlag,
- ) -> Result, BuildError> {
- let variables = self.build_global_variables();
-
- let config = ExecutionConfig::new(self.functions, &variables)
- .lazy(true)
- .debug_attributes(
- [DEBUG_ATTR_PREFIX, "msgb_location"]
- .concat()
- .as_str()
- .into(),
- [DEBUG_ATTR_PREFIX, "msgb_variable"]
- .concat()
- .as_str()
- .into(),
- [DEBUG_ATTR_PREFIX, "msgb_match_node"]
- .concat()
- .as_str()
- .into(),
- );
-
- self.msgb.execute_into(
- &mut self.graph,
- &self.tree_cursor,
- &config,
- &(cancellation_flag as &dyn CancellationFlag),
- )?;
-
- self.load(cancellation_flag)?;
-
- Ok(BuildResult {
- #[cfg(feature = "__private_testing_utils")]
- graph: self.graph,
- cursors: self.cursors,
- definitions_info: self.definitions_info,
- references_info: self.references_info,
- extension_hooks: self.extension_hooks,
- })
- }
+pub use crate::graph::BindingGraph;
- /// Create a graph node to represent the stack graph node. It is the callers responsibility to
- /// ensure the stack graph node exists.
- pub fn inject_node(&mut self, id: NodeID) -> GraphNodeRef {
- let node = self.graph.add_graph_node();
- self.remapped_nodes.insert(node.index(), id);
- self.injected_node_count += 1;
- node
- }
+pub(crate) struct DefinitionBindingInfo {
+ pub(crate) definiens: Cursor,
+ parents: Vec,
+ extension_scope: Option,
+ inherit_extensions: bool,
}
-/// An error that can occur while loading a stack graph from a TSG file
-#[derive(Debug, Error)]
-pub enum BuildError {
- #[error("{0}")]
- Cancelled(&'static str),
- #[error("Missing ‘symbol’ attribute on graph node")]
- MissingSymbol(GraphNodeRef),
- #[error("Missing ‘scope’ attribute on graph node")]
- MissingScope(GraphNodeRef),
- #[error("Unknown ‘{0}’ flag type {1}")]
- UnknownFlagType(String, String),
- #[error("Unknown node type {0}")]
- UnknownNodeType(String),
- #[error("Unknown symbol type {0}")]
- UnknownSymbolType(String),
- #[error(transparent)]
- ExecutionError(ExecutionError),
- #[error("Expected exported symbol scope in {0}, got {1}")]
- SymbolScopeError(String, String),
- #[error("Parent must be either a reference or definition")]
- InvalidParent(GraphNodeRef),
+pub(crate) struct ReferenceBindingInfo {
+ parents: Vec,
}
-impl From for BuildError {
- fn from(value: stack_graphs::CancellationError) -> Self {
- Self::Cancelled(value.0)
- }
+pub struct BindingGraphBuilder {
+ graph_builder_file: File,
+ functions: Functions,
+ pub(crate) stack_graph: StackGraph,
+ pub(crate) cursors: HashMap>,
+ pub(crate) definitions_info: HashMap>,
+ pub(crate) references_info: HashMap,
+ pub(crate) cursor_to_definitions: HashMap,
+ pub(crate) cursor_to_references: HashMap,
+ extension_hooks: HashSet,
}
-impl From for BuildError {
- fn from(value: ExecutionError) -> Self {
- match value {
- ExecutionError::Cancelled(err) => Self::Cancelled(err.0),
- err => Self::ExecutionError(err),
- }
- }
+#[derive(Clone)]
+pub enum FileDescriptor {
+ User(String),
+ System(String),
}
-impl<'a, KT: KindTypes + 'static> Builder<'a, KT> {
- fn load(&mut self, cancellation_flag: &dyn CancellationFlag) -> Result<(), BuildError> {
- let cancellation_flag: &dyn stack_graphs::CancellationFlag = &cancellation_flag;
-
- // By default graph ids are used for stack graph local_ids. A remapping is computed
- // for local_ids that already exist in the graph---all other graph ids are mapped to
- // the same local_id. See [`self.node_id_for_index`] for more details.
- let mut next_local_id = u32::try_from(self.graph.node_count() - self.injected_node_count)
- .expect("nodes local_id to fit in u32");
- for node in self.stack_graph.nodes_for_file(self.file) {
- let local_id = self.stack_graph[node].id().local_id();
- let index = (local_id as usize) + self.injected_node_count;
- // find next available local_id for which no stack graph node exists yet
- while self
- .stack_graph
- .node_for_id(NodeID::new_in_file(self.file, next_local_id))
- .is_some()
- {
- next_local_id += 1;
- }
- // remap graph node index to the available stack graph node local_id
- if self
- .remapped_nodes
- .insert(index, NodeID::new_in_file(self.file, next_local_id))
- .is_some()
- {
- panic!("index already remapped");
- }
- }
-
- // First create a stack graph node for each MSGB node. (The skip(...) is because the first
- // DSL nodes that we create are the proxies for the injected stack graph nodes.)
- for node_ref in self.graph.iter_nodes().skip(self.injected_node_count) {
- cancellation_flag.check("loading graph nodes")?;
- let node_type = self.get_node_type(node_ref)?;
- let handle = match node_type {
- NodeType::DropScopes => self.load_drop_scopes(node_ref),
- NodeType::PopScopedSymbol => self.load_pop_scoped_symbol(node_ref)?,
- NodeType::PopSymbol => self.load_pop_symbol(node_ref)?,
- NodeType::PushScopedSymbol => self.load_push_scoped_symbol(node_ref)?,
- NodeType::PushSymbol => self.load_push_symbol(node_ref)?,
- NodeType::Scope => self.load_scope(node_ref)?,
- };
- self.load_source_info(node_ref, handle)?;
- self.load_node_debug_info(node_ref, handle);
- }
-
- // Iterate again to resolve parents attribute, which refers to other nodes in the graph
- for node_ref in self.graph.iter_nodes().skip(self.injected_node_count) {
- cancellation_flag.check("loading graph nodes additional info")?;
- self.load_additional_info(node_ref)?;
- }
+#[derive(Debug)]
+pub(crate) struct FileDescriptorError;
- for node in self.stack_graph.nodes_for_file(self.file) {
- self.verify_node(node)?;
- }
+impl FileDescriptor {
+ // Internal functions to convert a FileDescriptor to and from a string for
+ // representation inside the stack graph
- // Then add stack graph edges for each TSG edge. Note that we _don't_ skip(...) here because
- // there might be outgoing nodes from the “root” node that we need to process.
- // (Technically the caller could add outgoing nodes from “jump to scope” as well, but those
- // are invalid according to the stack graph semantics and will never be followed.
- for source_ref in self.graph.iter_nodes() {
- let source = &self.graph[source_ref];
- let source_node_id = self.node_id_for_graph_node(source_ref);
- let source_handle = self.stack_graph.node_for_id(source_node_id).unwrap();
- for (sink_ref, edge) in source.iter_edges() {
- cancellation_flag.check("loading graph edges")?;
- let precedence = match edge.attributes.get(PRECEDENCE_ATTR) {
- Some(precedence) => precedence.as_integer()?,
- None => 0,
- }
- .try_into()
- .map_err(|_| ExecutionError::ExpectedInteger("integer does not fit".to_string()))?;
- let sink_node_id = self.node_id_for_graph_node(sink_ref);
- let sink_handle = self.stack_graph.node_for_id(sink_node_id).unwrap();
- self.stack_graph
- .add_edge(source_handle, sink_handle, precedence);
- Self::load_edge_debug_info(self.stack_graph, source_handle, sink_handle, edge);
- }
+ pub(crate) fn as_string(&self) -> String {
+ match self {
+ Self::User(path) => format!("user:{path}"),
+ Self::System(path) => format!("system:{path}"),
}
-
- Ok(())
}
- fn get_node_type(&self, node_ref: GraphNodeRef) -> Result {
- let node = &self.graph[node_ref];
- let node_type = match node.attributes.get(TYPE_ATTR) {
- Some(node_type) => node_type.as_str()?,
- None => return Ok(NodeType::Scope),
- };
- if node_type == DROP_SCOPES_TYPE {
- Ok(NodeType::DropScopes)
- } else if node_type == POP_SCOPED_SYMBOL_TYPE {
- Ok(NodeType::PopScopedSymbol)
- } else if node_type == POP_SYMBOL_TYPE {
- Ok(NodeType::PopSymbol)
- } else if node_type == PUSH_SCOPED_SYMBOL_TYPE {
- Ok(NodeType::PushScopedSymbol)
- } else if node_type == PUSH_SYMBOL_TYPE {
- Ok(NodeType::PushSymbol)
- } else if node_type == SCOPE_TYPE {
- Ok(NodeType::Scope)
- } else {
- Err(BuildError::UnknownNodeType(node_type.to_string()))
- }
+ pub(crate) fn try_from(value: &str) -> Result {
+ value
+ .strip_prefix("user:")
+ .map(|path| FileDescriptor::User(path.into()))
+ .or_else(|| {
+ value
+ .strip_prefix("system:")
+ .map(|path| FileDescriptor::System(path.into()))
+ })
+ .ok_or(FileDescriptorError)
}
- fn verify_node(&self, node: Handle) -> Result<(), BuildError> {
- if let Node::PushScopedSymbol(node) = &self.stack_graph[node] {
- let scope = &self.stack_graph[self.stack_graph.node_for_id(node.scope).unwrap()];
- if !scope.is_exported_scope() {
- return Err(BuildError::SymbolScopeError(
- format!("{}", node.display(self.stack_graph)),
- format!("{}", scope.display(self.stack_graph)),
- ));
- }
- }
- Ok(())
+ pub(crate) fn from(value: &str) -> Self {
+ Self::try_from(value)
+ .unwrap_or_else(|_| panic!("{value} should be a valid file descriptor"))
}
-}
-enum NodeType {
- DropScopes,
- PopSymbol,
- PopScopedSymbol,
- PushSymbol,
- PushScopedSymbol,
- Scope,
-}
-
-impl<'a, KT: KindTypes> Builder<'a, KT> {
- /// Get the `NodeID` corresponding to a `Graph` node.
- ///
- /// By default, graph nodes get their index shifted by [`self.injected_node_count`] as their
- /// `local_id`, unless they have a corresponding entry in the [`self.remapped_nodes`] map. This
- /// is the case if:
- /// 1. The node was injected, in which case it is mapped to the `NodeID` of the injected node.
- /// 2. The node's default `local_id` clashes with a preexisting node, in which case it is mapped to
- /// an available `local_id` beyond the range of default `local_ids`.
- fn node_id_for_graph_node(&self, node_ref: GraphNodeRef) -> NodeID {
- let index = node_ref.index();
- self.remapped_nodes.get(&index).map_or_else(
- || {
- NodeID::new_in_file(
- self.file,
- u32::try_from(index - self.injected_node_count)
- .expect("local_id to fit in u32"),
- )
- },
- |id| *id,
- )
+ pub fn get_path(&self) -> &str {
+ match self {
+ Self::User(path) => path,
+ Self::System(path) => path,
+ }
}
- fn load_drop_scopes(&mut self, node_ref: GraphNodeRef) -> Handle {
- let id = self.node_id_for_graph_node(node_ref);
- self.stack_graph.add_drop_scopes_node(id).unwrap()
+ pub fn is_system(&self) -> bool {
+ matches!(self, Self::System(_))
}
- fn load_pop_scoped_symbol(
- &mut self,
- node_ref: GraphNodeRef,
- ) -> Result, BuildError> {
- let node = &self.graph[node_ref];
- let symbol = match node.attributes.get(SYMBOL_ATTR) {
- Some(symbol) => Self::load_symbol(symbol)?,
- None => return Err(BuildError::MissingSymbol(node_ref)),
- };
- let symbol = self.stack_graph.add_symbol(&symbol);
- let id = self.node_id_for_graph_node(node_ref);
- let is_definition = Self::load_flag(node, IS_DEFINITION_ATTR)?;
- Self::verify_attributes(node, POP_SCOPED_SYMBOL_TYPE, &POP_SCOPED_SYMBOL_ATTRS);
- let node_handle = self
- .stack_graph
- .add_pop_scoped_symbol_node(id, symbol, is_definition)
- .unwrap();
- Ok(node_handle)
+ pub fn is_user(&self) -> bool {
+ matches!(self, Self::User(_))
}
- fn load_pop_symbol(&mut self, node_ref: GraphNodeRef) -> Result, BuildError> {
- let node = &self.graph[node_ref];
- let symbol = match node.attributes.get(SYMBOL_ATTR) {
- Some(symbol) => Self::load_symbol(symbol)?,
- None => return Err(BuildError::MissingSymbol(node_ref)),
- };
- let symbol = self.stack_graph.add_symbol(&symbol);
- let id = self.node_id_for_graph_node(node_ref);
- let is_definition = Self::load_flag(node, IS_DEFINITION_ATTR)?;
- Self::verify_attributes(node, POP_SYMBOL_TYPE, &POP_SYMBOL_ATTRS);
- let node_handle = self
- .stack_graph
- .add_pop_symbol_node(id, symbol, is_definition)
- .unwrap();
- Ok(node_handle)
+ pub fn is_user_path(&self, path: &str) -> bool {
+ matches!(self, Self::User(user_path) if user_path == path)
}
+}
- fn load_push_scoped_symbol(
- &mut self,
- node_ref: GraphNodeRef,
- ) -> Result, BuildError> {
- let node = &self.graph[node_ref];
- let symbol = match node.attributes.get(SYMBOL_ATTR) {
- Some(symbol) => Self::load_symbol(symbol)?,
- None => return Err(BuildError::MissingSymbol(node_ref)),
- };
- let symbol = self.stack_graph.add_symbol(&symbol);
- let id = self.node_id_for_graph_node(node_ref);
- let scope = match node.attributes.get(SCOPE_ATTR) {
- Some(scope) => self.node_id_for_graph_node(scope.as_graph_node_ref()?),
- None => return Err(BuildError::MissingScope(node_ref)),
- };
- let is_reference = Self::load_flag(node, IS_REFERENCE_ATTR)?;
- Self::verify_attributes(node, PUSH_SCOPED_SYMBOL_TYPE, &PUSH_SCOPED_SYMBOL_ATTRS);
- Ok(self
- .stack_graph
- .add_push_scoped_symbol_node(id, symbol, scope, is_reference)
- .unwrap())
- }
+pub trait PathResolver {
+ fn resolve_path(&self, context_path: &str, path_to_resolve: &Cursor) -> Option;
+}
- fn load_push_symbol(&mut self, node_ref: GraphNodeRef) -> Result, BuildError> {
- let node = &self.graph[node_ref];
- let symbol = match node.attributes.get(SYMBOL_ATTR) {
- Some(symbol) => Self::load_symbol(symbol)?,
- None => return Err(BuildError::MissingSymbol(node_ref)),
- };
- let symbol = self.stack_graph.add_symbol(&symbol);
- let id = self.node_id_for_graph_node(node_ref);
- let is_reference = Self::load_flag(node, IS_REFERENCE_ATTR)?;
- Self::verify_attributes(node, PUSH_SYMBOL_TYPE, &PUSH_SYMBOL_ATTRS);
- Ok(self
- .stack_graph
- .add_push_symbol_node(id, symbol, is_reference)
- .unwrap())
- }
+impl BindingGraphBuilder {
+ pub fn create(
+ version: Version,
+ binding_rules: &str,
+ path_resolver: Rc>,
+ ) -> Self {
+ let graph_builder_file =
+ File::from_str(binding_rules).expect("Bindings stack graph builder parse error");
+ let stack_graph = StackGraph::new();
+ let functions = loader::default_functions(version, path_resolver);
- fn load_scope(&mut self, node_ref: GraphNodeRef) -> Result, BuildError> {
- let node = &self.graph[node_ref];
- let id = self.node_id_for_graph_node(node_ref);
- let is_exported =
- Self::load_flag(node, IS_EXPORTED_ATTR)? || Self::load_flag(node, IS_ENDPOINT_ATTR)?;
- Self::verify_attributes(node, SCOPE_TYPE, &SCOPE_ATTRS);
- Ok(self.stack_graph.add_scope_node(id, is_exported).unwrap())
+ Self {
+ graph_builder_file,
+ functions,
+ stack_graph,
+ cursors: HashMap::new(),
+ definitions_info: HashMap::new(),
+ references_info: HashMap::new(),
+ cursor_to_definitions: HashMap::new(),
+ cursor_to_references: HashMap::new(),
+ extension_hooks: HashSet::new(),
+ }
}
- fn load_symbol(value: &Value) -> Result