Packages

A Sketch runtime package, made to generate CSS!

Current section

Files

Jump to
sketch_css src sketch_css@module@imports.erl
Raw

src/sketch_css@module@imports.erl

-module(sketch_css@module@imports).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([rewrite/1]).
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 25).
-spec init_environment(list(glance:definition(glance:import()))) -> list({binary(),
gleam@option:option(glance:import())}).
init_environment(Imports) ->
gleam@list:fold(
Imports,
[],
fun(Env, Import_) ->
{import, Module, Alias, _, _} = erlang:element(3, Import_),
Import_@1 = {some, erlang:element(3, Import_)},
case Alias of
{some, {named, Name}} ->
[{Name, Import_@1} | Env];
{some, {discarded, _}} ->
Env;
none ->
_pipe = Module,
_pipe@1 = gleam@string:split(_pipe, <<"/"/utf8>>),
_pipe@2 = gleam@list:last(_pipe@1),
_pipe@3 = gleam@result:map(
_pipe@2,
fun(_capture) -> gleam@pair:new(_capture, Import_@1) end
),
_pipe@4 = gleam@result:map(
_pipe@3,
fun(_capture@1) ->
gleam@list:prepend(Env, _capture@1)
end
),
gleam@result:unwrap(_pipe@4, Env)
end
end
).
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 113).
-spec replace_import(
binary(),
list({binary(), gleam@option:option(glance:import())})
) -> binary().
replace_import(Name, Env) ->
_pipe = gleam@list:key_find(Env, Name),
_pipe@1 = gleam@result:unwrap(_pipe, none),
_pipe@2 = gleam@option:map(
_pipe@1,
fun(Import_) -> erlang:element(2, Import_) end
),
gleam@option:unwrap(_pipe@2, Name).
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 129).
-spec rewrite_type(
glance:type(),
list({binary(), gleam@option:option(glance:import())})
) -> glance:type().
rewrite_type(Type_, Env) ->
case Type_ of
{tuple_type, _} ->
Elements = gleam@list:map(
erlang:element(2, Type_),
fun(_capture) -> rewrite_type(_capture, Env) end
),
{tuple_type, Elements};
{named_type, _, _, _} ->
Module = gleam@option:map(
erlang:element(3, Type_),
fun(_capture@1) -> replace_import(_capture@1, Env) end
),
Parameters = gleam@list:map(
erlang:element(4, Type_),
fun(_capture@2) -> rewrite_type(_capture@2, Env) end
),
erlang:setelement(
4,
erlang:setelement(3, Type_, Module),
Parameters
);
{function_type, _, _} ->
Parameters@1 = gleam@list:map(
erlang:element(2, Type_),
fun(_capture@3) -> rewrite_type(_capture@3, Env) end
),
Return = rewrite_type(erlang:element(3, Type_), Env),
{function_type, Parameters@1, Return};
_ ->
Type_
end.
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 75).
-spec rewrite_custom_type(
glance:definition(glance:custom_type()),
list({binary(), gleam@option:option(glance:import())})
) -> glance:definition(glance:custom_type()).
rewrite_custom_type(Custom_type, Env) ->
{definition, Attributes, Definition} = Custom_type,
{definition,
Attributes,
(erlang:setelement(
6,
Definition,
(gleam@list:map(
erlang:element(6, Definition),
fun(Variant) ->
erlang:setelement(
3,
Variant,
(gleam@list:map(
erlang:element(3, Variant),
fun(Field) ->
Item = rewrite_type(
erlang:element(2, Field),
Env
),
case Field of
{labelled_variant_field, _, _} ->
erlang:setelement(2, Field, Item);
{unlabelled_variant_field, _} ->
{unlabelled_variant_field, Item}
end
end
))
)
end
))
))}.
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 102).
-spec rewrite_type_alias(
glance:definition(glance:type_alias()),
list({binary(), gleam@option:option(glance:import())})
) -> glance:definition(glance:type_alias()).
rewrite_type_alias(Type_alias, Env) ->
{definition, Attributes, Definition} = Type_alias,
{definition,
Attributes,
begin
Aliased = rewrite_type(erlang:element(5, Definition), Env),
erlang:setelement(5, Definition, Aliased)
end}.
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 120).
-spec rewrite_parameters(
glance:function_parameter(),
list({binary(), gleam@option:option(glance:import())})
) -> glance:function_parameter().
rewrite_parameters(Parameter, Env) ->
Rewrite_type = fun(_capture) -> rewrite_type(_capture, Env) end,
Type_ = gleam@option:map(erlang:element(4, Parameter), Rewrite_type),
erlang:setelement(4, Parameter, Type_).
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 152).
-spec rewrite_statement(
{list(glance:statement()),
list({binary(), gleam@option:option(glance:import())})},
glance:statement()
) -> {list(glance:statement()),
list({binary(), gleam@option:option(glance:import())})}.
rewrite_statement(Acc, Stat) ->
{Stats, Env} = Acc,
case Stat of
{expression, Expr} ->
Expr@1 = rewrite_expr(Expr, Env),
Stat@1 = {expression, Expr@1},
{[Stat@1 | Stats], Env};
{use, _, _} ->
Function = rewrite_expr(erlang:element(3, Stat), Env),
Stat@2 = erlang:setelement(3, Stat, Function),
{[Stat@2 | Stats], Env};
{assignment, _, _, _, _} ->
{Pattern, Env@1} = rewrite_pattern(erlang:element(3, Stat), Env),
Annotation = gleam@option:map(
erlang:element(4, Stat),
fun(_capture) -> rewrite_type(_capture, Env@1) end
),
Value = rewrite_expr(erlang:element(5, Stat), Env@1),
Stat@3 = erlang:setelement(
5,
erlang:setelement(
4,
erlang:setelement(3, Stat, Pattern),
Annotation
),
Value
),
{[Stat@3 | Stats], Env@1}
end.
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 304).
-spec rewrite_expr(
glance:expression(),
list({binary(), gleam@option:option(glance:import())})
) -> glance:expression().
rewrite_expr(Expr, Env) ->
case Expr of
{negate_int, Expr@1} ->
{negate_int, rewrite_expr(Expr@1, Env)};
{negate_bool, Expr@2} ->
{negate_bool, rewrite_expr(Expr@2, Env)};
{panic, Expr@3} ->
{panic,
gleam@option:map(
Expr@3,
fun(_capture) -> rewrite_expr(_capture, Env) end
)};
{todo, Expr@4} ->
{todo,
gleam@option:map(
Expr@4,
fun(_capture@1) -> rewrite_expr(_capture@1, Env) end
)};
{tuple, Exprs} ->
{tuple,
gleam@list:map(
Exprs,
fun(_capture@2) -> rewrite_expr(_capture@2, Env) end
)};
{variable, Var} ->
{variable, replace_import(Var, Env)};
{tuple_index, _, _} ->
erlang:setelement(
2,
Expr,
rewrite_expr(erlang:element(2, Expr), Env)
);
{block, Stats} ->
_pipe = gleam@list:fold(Stats, {[], Env}, fun rewrite_statement/2),
_pipe@1 = gleam@pair:first(_pipe),
_pipe@2 = lists:reverse(_pipe@1),
{block, _pipe@2};
{fn, Arguments, Return_annotation, Body} ->
Rewrite_type = fun(_capture@3) -> rewrite_type(_capture@3, Env) end,
Return_annotation@1 = gleam@option:map(
Return_annotation,
Rewrite_type
),
Body@1 = rewrite_function_body(Body, Env),
{fn,
(gleam@list:map(
Arguments,
fun(Argument) ->
Type_ = gleam@option:map(
erlang:element(3, Argument),
Rewrite_type
),
erlang:setelement(3, Argument, Type_)
end
)),
Return_annotation@1,
Body@1};
{list, _, _} ->
Elements = gleam@list:map(
erlang:element(2, Expr),
fun(_capture@4) -> rewrite_expr(_capture@4, Env) end
),
Rest = gleam@option:map(
erlang:element(3, Expr),
fun(_capture@5) -> rewrite_expr(_capture@5, Env) end
),
{list, Elements, Rest};
{record_update, _, _, _, _} ->
Module = gleam@option:map(
erlang:element(2, Expr),
fun(_capture@6) -> replace_import(_capture@6, Env) end
),
Record = rewrite_expr(erlang:element(4, Expr), Env),
erlang:setelement(
5,
erlang:setelement(4, erlang:setelement(2, Expr, Module), Record),
(gleam@list:map(
erlang:element(5, Expr),
fun(Field) ->
Item = gleam@option:map(
erlang:element(3, Field),
fun(_capture@7) -> rewrite_expr(_capture@7, Env) end
),
erlang:setelement(3, Field, Item)
end
))
);
{field_access, _, _} ->
Container = rewrite_expr(erlang:element(2, Expr), Env),
erlang:setelement(2, Expr, Container);
{call, _, _} ->
Rewrite_expr_field = fun(_capture@8) ->
rewrite_expr_field(_capture@8, Env)
end,
Function = rewrite_expr(erlang:element(2, Expr), Env),
Arguments@1 = gleam@list:map(
erlang:element(3, Expr),
Rewrite_expr_field
),
{call, Function, Arguments@1};
{fn_capture, _, Function@1, Arguments_before, Arguments_after} ->
Rewrite_expr_field@1 = fun(_capture@9) ->
rewrite_expr_field(_capture@9, Env)
end,
Function@2 = rewrite_expr(Function@1, Env),
Arguments_before@1 = gleam@list:map(
Arguments_before,
Rewrite_expr_field@1
),
Arguments_after@1 = gleam@list:map(
Arguments_after,
Rewrite_expr_field@1
),
erlang:setelement(
5,
erlang:setelement(
4,
erlang:setelement(3, Expr, Function@2),
Arguments_before@1
),
Arguments_after@1
);
{bit_string, Segments} ->
Rewrite_expr = fun(_capture@10) ->
rewrite_expr(_capture@10, Env)
end,
{bit_string,
(gleam@list:map(
Segments,
fun(_use0) ->
{Expr@5, Segments@1} = _use0,
{Rewrite_expr(Expr@5),
(gleam@list:map(
Segments@1,
fun(Segment) -> case Segment of
{size_value_option, Expr@6} ->
{size_value_option,
Rewrite_expr(Expr@6)};
_ ->
Segment
end end
))}
end
))};
{'case', Subjects, Clauses} ->
Subjects@1 = gleam@list:map(
Subjects,
fun(_capture@11) -> rewrite_expr(_capture@11, Env) end
),
{'case',
Subjects@1,
(gleam@list:map(
Clauses,
fun(_use0@1) ->
{clause, Patterns, Guard, Body@2} = _use0@1,
{Patterns@1, Env@1} = rewrite_nested_patterns(
Patterns,
Env
),
Guard@1 = gleam@option:map(
Guard,
fun(_capture@12) ->
rewrite_expr(_capture@12, Env@1)
end
),
Body@3 = rewrite_expr(Body@2, Env@1),
{clause, Patterns@1, Guard@1, Body@3}
end
))};
{binary_operator, Name, Left, Right} ->
Left@1 = rewrite_expr(Left, Env),
Right@1 = rewrite_expr(Right, Env),
{binary_operator, Name, Left@1, Right@1};
_ ->
Expr
end.
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 56).
-spec rewrite_function_body(
list(glance:statement()),
list({binary(), gleam@option:option(glance:import())})
) -> list(glance:statement()).
rewrite_function_body(Body, Env) ->
_pipe = gleam@list:fold(Body, {[], Env}, fun rewrite_statement/2),
_pipe@1 = gleam@pair:first(_pipe),
lists:reverse(_pipe@1).
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 42).
-spec rewrite_function(
glance:definition(glance:function_()),
list({binary(), gleam@option:option(glance:import())})
) -> glance:definition(glance:function_()).
rewrite_function(Function, Env) ->
{definition, Attributes, Definition} = Function,
{definition,
Attributes,
begin
{function, _, _, Parameters, Return, Body, _} = Definition,
Parameters@1 = gleam@list:map(
Parameters,
fun(_capture) -> rewrite_parameters(_capture, Env) end
),
Return@1 = gleam@option:map(
Return,
fun(_capture@1) -> rewrite_type(_capture@1, Env) end
),
Body@1 = rewrite_function_body(Body, Env),
erlang:setelement(
6,
erlang:setelement(
5,
erlang:setelement(4, Definition, Parameters@1),
Return@1
),
Body@1
)
end}.
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 62).
-spec rewrite_constant(
glance:definition(glance:constant()),
list({binary(), gleam@option:option(glance:import())})
) -> glance:definition(glance:constant()).
rewrite_constant(Constant, Env) ->
{definition, Attributes, Definition} = Constant,
{definition,
Attributes,
begin
{constant, _, _, Annotation, Value} = Definition,
Annotation@1 = gleam@option:map(
Annotation,
fun(_capture) -> rewrite_type(_capture, Env) end
),
Value@1 = rewrite_expr(Value, Env),
erlang:setelement(
5,
erlang:setelement(4, Definition, Annotation@1),
Value@1
)
end}.
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 16).
-spec rewrite(glance:module_()) -> glance:module_().
rewrite(Mod) ->
Env = init_environment(erlang:element(2, Mod)),
Type_aliases = gleam@list:map(
erlang:element(4, Mod),
fun(_capture) -> rewrite_type_alias(_capture, Env) end
),
Custom_types = gleam@list:map(
erlang:element(3, Mod),
fun(_capture@1) -> rewrite_custom_type(_capture@1, Env) end
),
Constants = gleam@list:map(
erlang:element(5, Mod),
fun(_capture@2) -> rewrite_constant(_capture@2, Env) end
),
Functions = gleam@list:map(
erlang:element(6, Mod),
fun(_capture@3) -> rewrite_function(_capture@3, Env) end
),
erlang:setelement(
4,
erlang:setelement(
3,
erlang:setelement(
5,
erlang:setelement(6, Mod, Functions),
Constants
),
Custom_types
),
Type_aliases
).
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 290).
-spec rewrite_expr_field(
glance:field(glance:expression()),
list({binary(), gleam@option:option(glance:import())})
) -> glance:field(glance:expression()).
rewrite_expr_field(Field, Env) ->
case Field of
{unlabelled_field, Item} ->
{unlabelled_field, rewrite_expr(Item, Env)};
{shorthand_field, Label} ->
{shorthand_field, Label};
{labelled_field, _, Item@1} ->
Item@2 = rewrite_expr(Item@1, Env),
erlang:setelement(3, Field, Item@2)
end.
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 234).
-spec rewrite_bitstring_segments_pattern(
list(glance:bit_string_segment_option(glance:pattern())),
list({binary(), gleam@option:option(glance:import())})
) -> {list(glance:bit_string_segment_option(glance:pattern())),
list({binary(), gleam@option:option(glance:import())})}.
rewrite_bitstring_segments_pattern(Segments, Env) ->
_pipe = gleam@list:fold(
Segments,
{[], Env},
fun(Acc, Segment) ->
{Segments@1, Env@1} = Acc,
case Segment of
{size_value_option, Type_} ->
{Type_@1, Env@2} = rewrite_pattern(Type_, Env@1),
Segment@1 = {size_value_option, Type_@1},
{[Segment@1 | Segments@1], Env@2};
_ ->
{[Segment | Segments@1], Env@1}
end
end
),
gleam@pair:map_first(_pipe, fun lists:reverse/1).
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 180).
-spec rewrite_pattern(
glance:pattern(),
list({binary(), gleam@option:option(glance:import())})
) -> {glance:pattern(), list({binary(), gleam@option:option(glance:import())})}.
rewrite_pattern(Pattern, Env) ->
case Pattern of
{pattern_variable, Name} ->
_pipe = {Name, none},
_pipe@1 = gleam@list:prepend(Env, _pipe),
gleam@pair:new({pattern_variable, Name}, _pipe@1);
{pattern_tuple, Elems} ->
_pipe@2 = rewrite_patterns(Elems, Env),
gleam@pair:map_first(
_pipe@2,
fun(Field@0) -> {pattern_tuple, Field@0} end
);
{pattern_list, Elements, Tail} ->
{Elements@1, Env@1} = rewrite_patterns(Elements, Env),
{Tail@2, Env@2} = case Tail of
none ->
{none, Env@1};
{some, Tail@1} ->
_pipe@3 = rewrite_pattern(Tail@1, Env@1),
gleam@pair:map_first(
_pipe@3,
fun(Field@0) -> {some, Field@0} end
)
end,
{{pattern_list, Elements@1, Tail@2}, Env@2};
{pattern_bit_string, Segments} ->
_pipe@4 = gleam@list:fold(
Segments,
{[], Env},
fun(Acc, Segment) ->
{Exprs, Env@3} = Acc,
{Pattern@1, Segments@1} = Segment,
{Pattern@2, Env@4} = rewrite_pattern(Pattern@1, Env@3),
{Segments@2, Env@5} = rewrite_bitstring_segments_pattern(
Segments@1,
Env@4
),
{[{Pattern@2, Segments@2} | Exprs], Env@5}
end
),
_pipe@5 = gleam@pair:map_first(_pipe@4, fun lists:reverse/1),
gleam@pair:map_first(
_pipe@5,
fun(Field@0) -> {pattern_bit_string, Field@0} end
);
{pattern_concatenate, Left, {named, Name@1} = Right} ->
Env@6 = [{Name@1, none} | Env],
{{pattern_concatenate, Left, Right}, Env@6};
{pattern_constructor, Module, _, Arguments, _} ->
Module@1 = gleam@option:map(
Module,
fun(_capture) -> replace_import(_capture, Env) end
),
{Arguments@1, Env@7} = rewrite_pattern_fields(Arguments, Env),
{erlang:setelement(
4,
erlang:setelement(2, Pattern, Module@1),
Arguments@1
),
Env@7};
_ ->
{Pattern, Env}
end.
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 252).
-spec rewrite_patterns(
list(glance:pattern()),
list({binary(), gleam@option:option(glance:import())})
) -> {list(glance:pattern()),
list({binary(), gleam@option:option(glance:import())})}.
rewrite_patterns(Elems, Env) ->
_pipe@1 = gleam@list:fold(
Elems,
{[], Env},
fun(Elems@1, Elem) ->
{Elems@2, Env@1} = Elems@1,
_pipe = rewrite_pattern(Elem, Env@1),
gleam@pair:map_first(
_pipe,
fun(_capture) -> gleam@list:prepend(Elems@2, _capture) end
)
end
),
gleam@pair:map_first(_pipe@1, fun lists:reverse/1).
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 261).
-spec rewrite_pattern_fields(
list(glance:field(glance:pattern())),
list({binary(), gleam@option:option(glance:import())})
) -> {list(glance:field(glance:pattern())),
list({binary(), gleam@option:option(glance:import())})}.
rewrite_pattern_fields(Arguments, Env) ->
_pipe@2 = gleam@list:fold(
Arguments,
{[], Env},
fun(Acc, Argument) ->
{Exprs, Env@1} = Acc,
case Argument of
{shorthand_field, Label} ->
_pipe = {Label, none},
_pipe@1 = gleam@list:prepend(Env@1, _pipe),
gleam@pair:new([Argument | Exprs], _pipe@1);
{unlabelled_field, Item} ->
{Item@1, Env@2} = rewrite_pattern(Item, Env@1),
Field = {unlabelled_field, Item@1},
{[Field | Exprs], Env@2};
{labelled_field, _, Item@2} ->
{Item@3, Env@3} = rewrite_pattern(Item@2, Env@1),
Field@1 = erlang:setelement(3, Argument, Item@3),
{[Field@1 | Exprs], Env@3}
end
end
),
gleam@pair:map_first(_pipe@2, fun lists:reverse/1).
-file("/Users/doctor/Workspace/sketch/sketch_css/src/sketch_css/module/imports.gleam", 409).
-spec rewrite_nested_patterns(
list(list(glance:pattern())),
list({binary(), gleam@option:option(glance:import())})
) -> {list(list(glance:pattern())),
list({binary(), gleam@option:option(glance:import())})}.
rewrite_nested_patterns(Patterns, Env) ->
_pipe@1 = gleam@list:fold(
Patterns,
{[], Env},
fun(Acc, Pattern) ->
{Patterns@1, Env@1} = Acc,
_pipe = rewrite_patterns(Pattern, Env@1),
gleam@pair:map_first(
_pipe,
fun(_capture) -> gleam@list:prepend(Patterns@1, _capture) end
)
end
),
gleam@pair:map_first(_pipe@1, fun lists:reverse/1).