From 58c1fff66680bcb14433f8cd81740bd1ee071399 Mon Sep 17 00:00:00 2001 From: Koki Fushimi Date: Tue, 11 Jun 2024 16:03:00 +0900 Subject: [PATCH 1/3] Add type assertions for function arguments in `src/composer.jl`. --- src/composer.jl | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/composer.jl b/src/composer.jl index b410396..4ae58da 100644 --- a/src/composer.jl +++ b/src/composer.jl @@ -31,8 +31,7 @@ mutable struct Composer resolver::Resolver end - -function compose(events) +function compose(events::EventStream) composer = Composer(events, Dict{String, Node}(), Resolver()) @assert typeof(forward!(composer.input)) == StreamStartEvent node = compose_document(composer) @@ -53,8 +52,7 @@ function compose_document(composer::Composer) node end - -function handle_event(event::AliasEvent, composer) +function handle_event(event::AliasEvent, composer::Composer) anchor = event.anchor forward!(composer.input) haskey(composer.anchors, anchor) || throw(ComposerError( @@ -68,26 +66,25 @@ handle_error(event, composer, anchor) = composer.anchors[anchor].start_mark, "second occurence", event.start_mark)) -function handle_event(event::ScalarEvent, composer) +function handle_event(event::ScalarEvent, composer::Composer) anchor = event.anchor handle_error(event, composer, anchor) compose_scalar_node(composer, anchor) end -function handle_event(event::SequenceStartEvent, composer) +function handle_event(event::SequenceStartEvent, composer::Composer) anchor = event.anchor handle_error(event, composer, anchor) compose_sequence_node(composer, anchor) end -function handle_event(event::MappingStartEvent, composer) +function handle_event(event::MappingStartEvent, composer::Composer) anchor = event.anchor handle_error(event, composer, anchor) compose_mapping_node(composer, anchor) end -handle_event(event, composer) = nothing - +handle_event(event::Event, composer::Composer) = nothing function compose_node(composer::Composer) event = peek(composer.input) @@ -114,14 +111,13 @@ end compose_scalar_node(composer::Composer, anchor::Union{String, Nothing}) = _compose_scalar_node(forward!(composer.input), composer, anchor) - -__compose_sequence_node(event::SequenceEndEvent, composer, node) = false +__compose_sequence_node(event::SequenceEndEvent, composer::Composer, node::Node) = false function __compose_sequence_node(event::Event, composer, node) push!(node.value, compose_node(composer)) true end -function _compose_sequence_node(start_event::SequenceStartEvent, composer, anchor) +function _compose_sequence_node(start_event::SequenceStartEvent, composer::Composer, anchor::Union{String, Nothing}) tag = start_event.tag if tag === nothing || tag == "!" tag = resolve(composer.resolver, SequenceNode, @@ -147,9 +143,8 @@ end compose_sequence_node(composer::Composer, anchor::Union{String, Nothing}) = _compose_sequence_node(forward!(composer.input), composer, anchor) - -__compose_mapping_node(event::MappingEndEvent, composer, node) = false -function __compose_mapping_node(event::Event, composer, node) +__compose_mapping_node(event::MappingEndEvent, composer::Composer, node::Node) = false +function __compose_mapping_node(event::Event, composer::Composer, node::Node) item_key = compose_node(composer) item_value = compose_node(composer) push!(node.value, (item_key, item_value)) From 14f1c4eca697a4a817a36e471f3db88a7743e33d Mon Sep 17 00:00:00 2001 From: Koki Fushimi Date: Wed, 12 Jun 2024 04:53:14 +0900 Subject: [PATCH 2/3] Add missing type annotations. --- src/composer.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/composer.jl b/src/composer.jl index 4ae58da..178da37 100644 --- a/src/composer.jl +++ b/src/composer.jl @@ -60,7 +60,7 @@ function handle_event(event::AliasEvent, composer::Composer) return composer.anchors[anchor] end -handle_error(event, composer, anchor) = +handle_error(event::Event, composer::Composer, anchor::Union{String, Nothing}) = anchor !== nothing && haskey(composer.anchors, anchor) && throw(ComposerError( "found duplicate anchor '$(anchor)'; first occurance", composer.anchors[anchor].start_mark, "second occurence", From 487a9807f5ef251e09b7f64312e2f5169969c2f6 Mon Sep 17 00:00:00 2001 From: Koki Fushimi Date: Sun, 16 Jun 2024 16:52:35 +0900 Subject: [PATCH 3/3] Expose resolver to the function `load`. This is required to inform a resolver when loading by users. --- src/YAML.jl | 8 ++++++-- src/composer.jl | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/YAML.jl b/src/YAML.jl index 8dfd90d..99656d2 100644 --- a/src/YAML.jl +++ b/src/YAML.jl @@ -33,8 +33,12 @@ function _patch_constructors(more_constructors::_constructor, dicttype::_dicttyp end -load(ts::TokenStream, constructor::Constructor) = - construct_document(constructor, compose(EventStream(ts))) +function load(tokenstream::TokenStream, constructor::Constructor) + resolver = Resolver() + eventstream = EventStream(tokenstream) + node = compose(eventstream, resolver) + construct_document(constructor, node) +end load(input::IO, constructor::Constructor) = load(TokenStream(input), constructor) diff --git a/src/composer.jl b/src/composer.jl index 178da37..18773b8 100644 --- a/src/composer.jl +++ b/src/composer.jl @@ -31,8 +31,8 @@ mutable struct Composer resolver::Resolver end -function compose(events::EventStream) - composer = Composer(events, Dict{String, Node}(), Resolver()) +function compose(events::EventStream, resolver::Resolver) + composer = Composer(events, Dict{String, Node}(), resolver) @assert typeof(forward!(composer.input)) == StreamStartEvent node = compose_document(composer) if typeof(peek(composer.input)) == StreamEndEvent