diff --git a/docs.json b/docs.json index 517bbda3e..14f28b9ad 100644 --- a/docs.json +++ b/docs.json @@ -1 +1 @@ -[{"name":"Elm.Dependency","comment":"\n\n\n# Elm.Dependency\n\nThis module contains types regarding dependencies of a codebase.\nTo gain the most information of a codebase, information of the dependencies may be required.\nFor example, what operators does it define, or what constructors are defined for a custom type.\n\n\n## Types\n\n@docs Dependency, Version\n\n","unions":[],"aliases":[{"name":"Dependency","comment":" Record that represents a dependency. For example:\n\n { name = \"elm/core\"\n , version = \"1.0.0\"\n , interfaces = Dict.fromList [ ( \"Basics\", basicsInterface ), ... ]\n }\n\n","args":[],"type":"{ name : String.String, version : Elm.Dependency.Version, interfaces : Dict.Dict Elm.Syntax.ModuleName.ModuleName Elm.Interface.Interface }"},{"name":"Version","comment":" Alias for a version string. For example \"1.2.3\".\n","args":[],"type":"String.String"}],"values":[],"binops":[]},{"name":"Elm.Interface","comment":"\n\n\n# Elm.Interface\n\nA type that represents the interface for an Elm module.\nYou can see this as a trimmed down version of a file that only contains the header (`module X exposing (..)`) and some small set of additional data.\n\n\n## Types\n\n@docs Interface, Infix, Exposed\n\n\n## Functions\n\n@docs build, exposesAlias, exposesFunction, operators\n\n","unions":[{"name":"Exposed","comment":" Union type for the things that a module can expose. These are `Function`s, `CustomType`s, and `Alias`es.\n\nElm core packages can also define `Operator`s, and thus we take that into account as well.\nThe `Infix` type alias will contain all the information regarding the operator\n\n","args":[],"cases":[["Function",["String.String"]],["CustomType",["( String.String, List.List String.String )"]],["Alias",["String.String"]],["Operator",["Elm.Interface.Infix"]]]}],"aliases":[{"name":"Infix","comment":" Type representing all information regarding an infix operator.\n","args":[],"type":"{ direction : Elm.Syntax.Infix.InfixDirection, precedence : Basics.Int, operator : String.String, function : String.String }"},{"name":"Interface","comment":" An interface is just a list of 'things' that are exposed by a module.\n\n [ Type \"Color\" [ \"Red\", \"Blue\" ], Function \"asRgb\" ]\n\n","args":[],"type":"List.List Elm.Interface.Exposed"}],"values":[{"name":"build","comment":" Build an interface from a file\n","type":"Elm.Internal.RawFile.RawFile -> Elm.Interface.Interface"},{"name":"exposesAlias","comment":" A function to check whether an `Interface` exposes an certain type alias.\n","type":"String.String -> Elm.Interface.Interface -> Basics.Bool"},{"name":"exposesFunction","comment":" Check whether an `Interface` exposes an function.\n\n exposesFunction \"A\" [ Function \"A\", CustomType \"B\", [ \"C\" ] ] == True\n exposesFunction \"B\" [ Function \"A\", CustomType \"B\", [ \"C\" ] ] == False\n exposesFunction \"<\" [ Infix { operator = \"<\" , ... } ] == True\n exposesFunction \"A\" [ Alias \"A\" ] == False\n\n","type":"String.String -> Elm.Interface.Interface -> Basics.Bool"},{"name":"operators","comment":" Retrieve all operators exposed by the `Interface`\n","type":"Elm.Interface.Interface -> List.List Elm.Interface.Infix"}],"binops":[]},{"name":"Elm.Parser","comment":"\n\n\n# Elm Parser\n\n@docs parse\n\n","unions":[],"aliases":[],"values":[{"name":"parse","comment":" Parse some text as if it is an Elm source file.\nWhen parsing fails, the result will contain a list of errors indicating what went wrong (and/or where).\nIf it succeeds, you will get a `RawFile`.\nThis `RawFile` will require some post-processing to properly setup documentation and ensure that operator precedence is applied correctly (based on dependencies).\nTo process a `RawFile`, check out the `Processing` module.\n","type":"String.String -> Result.Result (List.List Parser.DeadEnd) Elm.Internal.RawFile.RawFile"}],"binops":[]},{"name":"Elm.Processing","comment":"\n\n\n# Elm.Processing\n\nProcessing raw files with the context of other files and dependencies.\n\n\n# Types\n\n@docs ProcessContext\n\n\n# Functions\n\n@docs init, addFile, addDependency, process, withWellKnownOperators\n\n","unions":[{"name":"ProcessContext","comment":" Opaque type to hold context for the processing\n","args":[],"cases":[]}],"aliases":[],"values":[{"name":"addDependency","comment":" Add a whole dependency with its modules to the context.\n","type":"Elm.Dependency.Dependency -> Elm.Processing.ProcessContext -> Elm.Processing.ProcessContext"},{"name":"addFile","comment":" Add a file to the context that may be a dependency for the file that will be processed.\n","type":"Elm.Internal.RawFile.RawFile -> Elm.Processing.ProcessContext -> Elm.Processing.ProcessContext"},{"name":"init","comment":" Initialise an empty context\n","type":"Elm.Processing.ProcessContext"},{"name":"process","comment":" Process a rawfile with a context.\nOperator precedence and documentation will be fixed.\n","type":"Elm.Processing.ProcessContext -> Elm.Internal.RawFile.RawFile -> Elm.Syntax.File.File"},{"name":"withWellKnownOperators","comment":" Add all well known operators to the processing context.\nThese include `elm/core`, `elm/url` and `elm/parser`.\n\nAdding these will ensure that the syntax tree is build correctly taking operator precedence into account.\n\n","type":"Elm.Processing.ProcessContext -> Elm.Processing.ProcessContext"}],"binops":[]},{"name":"Elm.RawFile","comment":"\n\n\n# Elm.RawFile\n\n@docs RawFile\n\n@docs moduleName, imports\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"RawFile","comment":" A Raw file\n","args":[],"type":"Elm.Internal.RawFile.RawFile"}],"values":[{"name":"decoder","comment":" JSON decoder for a `RawFile` syntax element.\n","type":"Json.Decode.Decoder Elm.RawFile.RawFile"},{"name":"encode","comment":" Encode a file to a value\n","type":"Elm.RawFile.RawFile -> Json.Encode.Value"},{"name":"imports","comment":" Encode a `RawFile` syntax element to JSON.\n","type":"Elm.RawFile.RawFile -> List.List Elm.Syntax.Import.Import"},{"name":"moduleName","comment":" Retrieve the module name for a raw file\n","type":"Elm.RawFile.RawFile -> Elm.Syntax.ModuleName.ModuleName"}],"binops":[]},{"name":"Elm.Syntax.Comments","comment":"\n\n\n# Comment Syntax\n\nThis syntax represents both single and multi line comments in Elm. For example:\n\n -- A comment\n\n\n\n\n {- Some\n multi\n line\n comment\n -}\n\n\n## Types\n\n@docs Comment\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"Comment","comment":" Type representing the comment syntax\n","args":[],"type":"String.String"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Comment` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Comments.Comment"},{"name":"encode","comment":" Encode a `Comment` syntax element to JSON.\n","type":"Elm.Syntax.Comments.Comment -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Declaration","comment":"\n\n\n# Declarations Syntax\n\nSyntax for the different top-level declarations in Elm.\nThese can be one of the following (all declared in `Declaration`):\n\n - Functions: `add x y = x + y`\n - Custom types: `type Color = Blue | Red`\n - Type aliases: `type alias Status = Int`\n - Port declaration: `port sendMessage: String -> Cmd msg`\n - Infix declarations. You will probably not need this, while only core packages can define these.\n\n\n## Types\n\n@docs Declaration\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[{"name":"Declaration","comment":" Custom type that represents all different top-level declarations.\n","args":[],"cases":[["FunctionDeclaration",["Elm.Syntax.Expression.Function"]],["AliasDeclaration",["Elm.Syntax.TypeAlias.TypeAlias"]],["CustomTypeDeclaration",["Elm.Syntax.Type.Type"]],["PortDeclaration",["Elm.Syntax.Port.Port"]],["InfixDeclaration",["Elm.Syntax.Infix.Infix"]]]}],"aliases":[],"values":[{"name":"decoder","comment":" JSON decoder for a `Declaration` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Declaration.Declaration"},{"name":"encode","comment":" Encode a `Declaration` syntax element to JSON.\n","type":"Elm.Syntax.Declaration.Declaration -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Documentation","comment":"\n\n\n# Documentation Syntax\n\nThis syntax represents documentation comments in Elm.\n\n\n## Types\n\n@docs Documentation\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"Documentation","comment":" Type representing the documentation syntax\n","args":[],"type":"String.String"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Documentation` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Documentation.Documentation"},{"name":"encode","comment":" Encode a `Documentation` syntax element to JSON.\n","type":"Elm.Syntax.Documentation.Documentation -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Exposing","comment":"\n\n\n# Exposing Syntax\n\nThis syntax represents the exposing declaration for both imports and module headers.\nFor example:\n\n exposing (Foo(..))\n exposing (..)\n\n\n# Types\n\n@docs Exposing, TopLevelExpose, ExposedType\n\n\n# Functions\n\n@docs exposesFunction, operators\n\n\n# Serialization\n\n@docs encode, decoder\n\n","unions":[{"name":"Exposing","comment":" Diffent kind of exposing declarations\n","args":[],"cases":[["All",["Elm.Syntax.Range.Range"]],["Explicit",["Elm.Syntax.Node.Node Elm.Syntax.Exposing.TopLevelExpose","List.List (Elm.Syntax.Node.Node Elm.Syntax.Exposing.TopLevelExpose)"]]]},{"name":"TopLevelExpose","comment":" An exposed entity\n","args":[],"cases":[["InfixExpose",["String.String"]],["FunctionExpose",["String.String"]],["TypeOrAliasExpose",["String.String"]],["TypeExpose",["Elm.Syntax.Exposing.ExposedType"]]]}],"aliases":[{"name":"ExposedType","comment":" Exposed Type\n","args":[],"type":"{ name : Elm.Syntax.Node.Node String.String, open : Maybe.Maybe Elm.Syntax.Range.Range }"}],"values":[{"name":"decoder","comment":" JSON decoder for an `Exposing` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Exposing.Exposing"},{"name":"encode","comment":" Encode an `Exposing` syntax element to JSON.\n","type":"Elm.Syntax.Exposing.Exposing -> Json.Encode.Value"},{"name":"exposesFunction","comment":" Check whether an import/module exposing list exposes a certain function. Will yield `True` if `Exposing` is exposing everything (`All`).\n\n exposesFunction \"something\" (All someRange) == True\n\n exposesFunction \"divide\" (Explicit [ Node someRange (FunctionExpose \"add\") ]) == False\n\n exposesFunction \"add\" (Explicit [ Node someRange (FunctionExpose \"add\") ]) == True\n\n","type":"String.String -> Elm.Syntax.Exposing.Exposing -> Basics.Bool"},{"name":"operators","comment":" Collect all operator names from a list of TopLevelExposes\n","type":"List.List Elm.Syntax.Exposing.TopLevelExpose -> List.List String.String"}],"binops":[]},{"name":"Elm.Syntax.Expression","comment":"\n\n\n# Expression Syntax\n\nThis syntax represents all that you can express in Elm.\nAlthough it is a easy and simple language, you can express a lot! See the `Expression` type for all the things you can express.\n\n\n## Types\n\n@docs Expression, Lambda, LetBlock, LetDeclaration, RecordSetter, CaseBlock, Case, Function, FunctionImplementation\n\n\n## Functions\n\n@docs functionRange, isLambda, isLet, isIfElse, isCase, isOperatorApplication\n\n\n## Serialization\n\n@docs encode, encodeFunction, decoder, functionDecoder\n\n","unions":[{"name":"Expression","comment":" Custom type for all expressions such as:\n\n - `Application`: `add a b`\n - `OperatorApplication`: `a + b`\n - `FunctionOrValue`: `add` or `True`\n - `IfBlock`: `if a then b else c`\n - `PrefixOperator`: `(+)`\n - `Operator`: `+`\n - `Integer`: `42`\n - `Hex`: `0x1F`\n - `Floatable`: `42.0`\n - `Negation`: `-a`\n - `Literal`: `\"text\"`\n - `CharLiteral`: `'a'`\n - `TupleExpression`: `()`, `(a)`, `(a, b)`, or `(a, b, c)`\n - `LetExpression`: `let a = 4 in a`\n - `CaseExpression`: `case a of` followed by pattern matches\n - `LambdaExpression`: `(\\a -> a)`\n - `RecordExpr`: `{ name = \"text\" }`\n - `ListExpr`: `[ x, y ]`\n - `RecordAccess`: `a.name`\n - `RecordAccessFunction`: `.name`\n - `RecordUpdateExpression`: `{ a | name = \"text\" }`\n - `GLSLExpression`: `[glsl| ... |]`\n\n","args":[],"cases":[["Application",["Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression","List.List (Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression)"]],["OperatorApplication",["String.String","Elm.Syntax.Infix.InfixDirection","Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression","Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression"]],["FunctionOrValue",["Elm.Syntax.ModuleName.ModuleName","String.String"]],["IfBlock",["Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression","Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression","Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression"]],["PrefixOperator",["String.String"]],["Operator",["String.String"]],["Integer",["Basics.Int"]],["Hex",["Basics.Int"]],["Floatable",["Basics.Float"]],["Negation",["Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression"]],["Literal",["String.String"]],["CharLiteral",["Char.Char"]],["TupleExpression",["List.List (Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression)"]],["LetExpression",["Elm.Syntax.Expression.LetBlock"]],["CaseExpression",["Elm.Syntax.Expression.CaseBlock"]],["LambdaExpression",["Elm.Syntax.Expression.Lambda"]],["RecordExpr",["List.List (Elm.Syntax.Node.Node Elm.Syntax.Expression.RecordSetter)"]],["ListExpr",["List.List (Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression)"]],["RecordAccess",["Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression","Elm.Syntax.Node.Node String.String"]],["RecordAccessFunction",["String.String"]],["RecordUpdateExpression",["Elm.Syntax.Node.Node String.String","Elm.Syntax.Node.Node Elm.Syntax.Expression.RecordSetter","List.List (Elm.Syntax.Node.Node Elm.Syntax.Expression.RecordSetter)"]],["GLSLExpression",["String.String"]]]},{"name":"LetDeclaration","comment":" Union type for all possible declarations in a let block\n","args":[],"cases":[["LetFunction",["Elm.Syntax.Expression.Function"]],["LetDestructuring",["Elm.Syntax.Node.Node Elm.Syntax.DestructurePattern.DestructurePattern","Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression"]]]}],"aliases":[{"name":"Case","comment":" A case in a case block\n","args":[],"type":"( Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern, Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression )"},{"name":"CaseBlock","comment":" Expression for a case block\n","args":[],"type":"{ expression : Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression, firstCase : Elm.Syntax.Expression.Case, restOfCases : List.List Elm.Syntax.Expression.Case }"},{"name":"Function","comment":" Type alias for a full function\n","args":[],"type":"{ documentation : Maybe.Maybe (Elm.Syntax.Node.Node Elm.Syntax.Documentation.Documentation), signature : Maybe.Maybe (Elm.Syntax.Node.Node Elm.Syntax.Signature.Signature), declaration : Elm.Syntax.Node.Node Elm.Syntax.Expression.FunctionImplementation }"},{"name":"FunctionImplementation","comment":" Type alias for a function's implementation\n","args":[],"type":"{ name : Elm.Syntax.Node.Node String.String, arguments : List.List (Elm.Syntax.Node.Node Elm.Syntax.DestructurePattern.DestructurePattern), expression : Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression }"},{"name":"Lambda","comment":" Expression for a lambda\n","args":[],"type":"{ firstArg : Elm.Syntax.Node.Node Elm.Syntax.DestructurePattern.DestructurePattern, restOfArgs : List.List (Elm.Syntax.Node.Node Elm.Syntax.DestructurePattern.DestructurePattern), expression : Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression }"},{"name":"LetBlock","comment":" Expression for a let block\n","args":[],"type":"{ declarations : List.List (Elm.Syntax.Node.Node Elm.Syntax.Expression.LetDeclaration), expression : Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression }"},{"name":"RecordSetter","comment":" Expression for setting a record field\n","args":[],"type":"( Elm.Syntax.Node.Node String.String, Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression )"}],"values":[{"name":"decoder","comment":" JSON decoder for an `Expression` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Expression.Expression"},{"name":"encode","comment":" Encode an `Expression` syntax element to JSON.\n","type":"Elm.Syntax.Expression.Expression -> Json.Encode.Value"},{"name":"encodeFunction","comment":" Encode a `Function` syntax element to JSON.\n","type":"Elm.Syntax.Expression.Function -> Json.Encode.Value"},{"name":"functionDecoder","comment":" JSON decoder for an `Function` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Expression.Function"},{"name":"functionRange","comment":" Get the full range of a function\n","type":"Elm.Syntax.Expression.Function -> Elm.Syntax.Range.Range"},{"name":"isCase","comment":" Check whether an expression is a case-expression\n","type":"Elm.Syntax.Expression.Expression -> Basics.Bool"},{"name":"isIfElse","comment":" Check whether an expression is an if-else-expression\n","type":"Elm.Syntax.Expression.Expression -> Basics.Bool"},{"name":"isLambda","comment":" Check whether an expression is a lambda-expression\n","type":"Elm.Syntax.Expression.Expression -> Basics.Bool"},{"name":"isLet","comment":" Check whether an expression is a let-expression\n","type":"Elm.Syntax.Expression.Expression -> Basics.Bool"},{"name":"isOperatorApplication","comment":" Check whether an expression is an operator appliation expression\n","type":"Elm.Syntax.Expression.Expression -> Basics.Bool"}],"binops":[]},{"name":"Elm.Syntax.File","comment":"\n\n\n# File Syntax\n\nThis syntax represents a whole Elm file.\n\n\n## Types\n\n@docs File\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"File","comment":" Type annotation for a file\n","args":[],"type":"{ moduleDefinition : Elm.Syntax.Node.Node Elm.Syntax.Module.Module, imports : List.List (Elm.Syntax.Node.Node Elm.Syntax.Import.Import), declarations : List.List (Elm.Syntax.Node.Node Elm.Syntax.Declaration.Declaration), comments : List.List (Elm.Syntax.Node.Node Elm.Syntax.Comments.Comment) }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `File` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.File.File"},{"name":"encode","comment":" Encode a `File` syntax element to JSON.\n","type":"Elm.Syntax.File.File -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Import","comment":"\n\n\n# Import Syntax\n\nThis syntax represents imports in Elm.\nFor example:\n\n import Html.Attributes as HA exposing (style)\n\n\n# Types\n\n@docs Import\n\n\n# Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"Import","comment":" Type alias representing an Import\n","args":[],"type":"{ moduleName : Elm.Syntax.Node.Node Elm.Syntax.ModuleName.ModuleName, moduleAlias : Maybe.Maybe (Elm.Syntax.Node.Node String.String), exposingList : Maybe.Maybe (Elm.Syntax.Node.Node Elm.Syntax.Exposing.Exposing) }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Import` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Import.Import"},{"name":"encode","comment":" Encode a `Import` syntax element to JSON.\n","type":"Elm.Syntax.Import.Import -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Infix","comment":" Infix Syntax\n\n#Types\n\n@docs Infix, InfixDirection\n\n\n# Json\n\n@docs encode, encodeDirection, decoder, decodeDirection\n\n","unions":[{"name":"InfixDirection","comment":" Union type for infix direction\n","args":[],"cases":[["Left",[]],["Right",[]],["Non",[]]]}],"aliases":[{"name":"Infix","comment":" Type annotation for a infix definition\n","args":[],"type":"{ direction : Elm.Syntax.Node.Node Elm.Syntax.Infix.InfixDirection, precedence : Elm.Syntax.Node.Node Basics.Int, operator : Elm.Syntax.Node.Node String.String, function : Elm.Syntax.Node.Node String.String }"}],"values":[{"name":"decodeDirection","comment":" Decode a infix direction\n","type":"Json.Decode.Decoder Elm.Syntax.Infix.InfixDirection"},{"name":"decoder","comment":" Decode an infix\n","type":"Json.Decode.Decoder Elm.Syntax.Infix.Infix"},{"name":"encode","comment":" Encode an infix\n","type":"Elm.Syntax.Infix.Infix -> Json.Encode.Value"},{"name":"encodeDirection","comment":" Encode the infix direction\n","type":"Elm.Syntax.Infix.InfixDirection -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Module","comment":"\n\n\n# Module Syntax\n\nThis syntax represents module definitions in Elm.\nFor example:\n\n module Html.Attributes exposing (style)\n\n\n## Module\n\n@docs Module, DefaultModuleData, EffectModuleData\n\n@docs exposingList, moduleName, isPortModule, isEffectModule\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[{"name":"Module","comment":" Union type for different kind of modules\n","args":[],"cases":[["NormalModule",["Elm.Syntax.Module.DefaultModuleData"]],["PortModule",["Elm.Syntax.Module.DefaultModuleData"]],["EffectModule",["Elm.Syntax.Module.EffectModuleData"]]]}],"aliases":[{"name":"DefaultModuleData","comment":" Data for a default default\n","args":[],"type":"{ moduleName : Elm.Syntax.Node.Node Elm.Syntax.ModuleName.ModuleName, exposingList : Elm.Syntax.Node.Node Elm.Syntax.Exposing.Exposing }"},{"name":"EffectModuleData","comment":" Data for an effect module\n","args":[],"type":"{ moduleName : Elm.Syntax.Node.Node Elm.Syntax.ModuleName.ModuleName, exposingList : Elm.Syntax.Node.Node Elm.Syntax.Exposing.Exposing, command : Maybe.Maybe (Elm.Syntax.Node.Node String.String), subscription : Maybe.Maybe (Elm.Syntax.Node.Node String.String) }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Module` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Module.Module"},{"name":"encode","comment":" Encode a `Module` syntax element to JSON.\n","type":"Elm.Syntax.Module.Module -> Json.Encode.Value"},{"name":"exposingList","comment":" Get the exposing list for a module.\n","type":"Elm.Syntax.Module.Module -> Elm.Syntax.Exposing.Exposing"},{"name":"isEffectModule","comment":" Check whether a module is defined as an effect-module\n","type":"Elm.Syntax.Module.Module -> Basics.Bool"},{"name":"isPortModule","comment":" Check whether a module is defined as a port-module\n","type":"Elm.Syntax.Module.Module -> Basics.Bool"},{"name":"moduleName","comment":" Get the name for a module. For older modules this may not be present.\n","type":"Elm.Syntax.Module.Module -> Elm.Syntax.ModuleName.ModuleName"}],"binops":[]},{"name":"Elm.Syntax.ModuleName","comment":"\n\n\n# Module Name Syntax\n\nThis syntax represents the module names in Elm. These can be used for imports, module names (duh), and for qualified access.\nFor example:\n\n module Elm.Syntax.ModuleName ...\n\n import Foo.Bar ...\n\n import ... as Something\n\n My.Module.something\n\n My.Module.SomeType\n\n\n## Types\n\n@docs ModuleName\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"ModuleName","comment":" Base representation for a module name\n","args":[],"type":"List.List String.String"}],"values":[{"name":"decoder","comment":" JSON decoder for a `ModuleName` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.ModuleName.ModuleName"},{"name":"encode","comment":" Encode a `ModuleName` syntax element to JSON.\n","type":"Elm.Syntax.ModuleName.ModuleName -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Node","comment":" Abstract Syntax Nodes\n\n\n# Types\n\n@docs Node\n\n\n# Functions\n\n@docs combine, range, value, map\n\n\n# Serialization\n\n@docs encode, decoder\n\n","unions":[{"name":"Node","comment":" Base representation for a syntax node in a source file.\n","args":["a"],"cases":[["Node",["Elm.Syntax.Range.Range","a"]]]}],"aliases":[],"values":[{"name":"combine","comment":" Combine two nodes, constructing a new node which will have the outer most range of the child nodes\n","type":"(Elm.Syntax.Node.Node a -> Elm.Syntax.Node.Node b -> c) -> Elm.Syntax.Node.Node a -> Elm.Syntax.Node.Node b -> Elm.Syntax.Node.Node c"},{"name":"decoder","comment":" A JSON decoder for `Node`\n","type":"Json.Decode.Decoder a -> Json.Decode.Decoder (Elm.Syntax.Node.Node a)"},{"name":"encode","comment":" Encode a `Node` into JSON\n","type":"(a -> Json.Encode.Value) -> Elm.Syntax.Node.Node a -> Json.Encode.Value"},{"name":"map","comment":" Map the value within a node leaving the range untouched\n","type":"(a -> b) -> Elm.Syntax.Node.Node a -> Elm.Syntax.Node.Node b"},{"name":"range","comment":" Extract the range out of a `Node a`\n","type":"Elm.Syntax.Node.Node a -> Elm.Syntax.Range.Range"},{"name":"value","comment":" Extract the value (`a`) out of a `Node a`\n","type":"Elm.Syntax.Node.Node a -> a"}],"binops":[]},{"name":"Elm.Syntax.Pattern","comment":"\n\n\n# Pattern Syntax\n\nThis syntax represents the patterns.\nFor example:\n\n Just x as someMaybe\n {name, age}\n\n\n# Types\n\n@docs Pattern, QualifiedNameRef\n\n\n## Functions\n\n@docs moduleNames\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[{"name":"Pattern","comment":" Custom type for all patterns such as:\n\n - `AllPattern`: `_`\n - `UnitPattern`: `()`\n - `CharPattern`: `'c'`\n - `StringPattern`: `\"hello\"`\n - `IntPattern`: `42`\n - `HexPattern`: `0x11`\n - `FloatPattern`: `42.0`\n - `TuplePattern`: `(a, b)`\n - `RecordPattern`: `{name, age}`\n - `UnConsPattern`: `x :: xs`\n - `ListPattern`: `[ x, y ]`\n - `VarPattern`: `x`\n - `NamedPattern`: `Just _`\n - `AsPattern`: `_ as x`\n - `ParenthesizedPattern`: `( _ )`\n\n","args":[],"cases":[["AllPattern",[]],["UnitPattern",[]],["CharPattern",["Char.Char"]],["StringPattern",["String.String"]],["IntPattern",["Basics.Int"]],["HexPattern",["Basics.Int"]],["TuplePattern",["List.List (Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern)"]],["RecordPattern",["List.List (Elm.Syntax.Node.Node String.String)"]],["UnConsPattern",["Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern","Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern"]],["ListPattern",["List.List (Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern)"]],["VarPattern",["String.String"]],["NamedPattern",["Elm.Syntax.Pattern.QualifiedNameRef","List.List (Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern)"]],["AsPattern",["Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern","Elm.Syntax.Node.Node String.String"]],["ParenthesizedPattern",["Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern"]]]}],"aliases":[{"name":"QualifiedNameRef","comment":" Qualified name reference such as `Maybe.Just`.\n","args":[],"type":"{ moduleName : List.List String.String, name : String.String }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Pattern` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Pattern.Pattern"},{"name":"encode","comment":" Encode a `Pattern` syntax element to JSON.\n","type":"Elm.Syntax.Pattern.Pattern -> Json.Encode.Value"},{"name":"moduleNames","comment":" Get all the modules names that are used in the pattern (and its nested patterns).\nUse this to collect qualified patterns, such as `Maybe.Just x`.\n","type":"Elm.Syntax.Pattern.Pattern -> List.List Elm.Syntax.ModuleName.ModuleName"}],"binops":[]},{"name":"Elm.Syntax.Range","comment":" Source Code Ranges\n\n\n# Types\n\n@docs Range, Location\n\n\n# Functions\n\n@docs emptyRange, combine\n\n\n# Comparison\n\nSee also [Basics.compare](https://package.elm-lang.org/packages/elm/core/latest/Basics#compare).\n\n@docs compare, compareLocations\n\n\n# Json\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"Location","comment":" Source location\n","args":[],"type":"{ row : Basics.Int, column : Basics.Int }"},{"name":"Range","comment":" Range for a piece of code with a start and end\n","args":[],"type":"{ start : Elm.Syntax.Range.Location, end : Elm.Syntax.Range.Location }"}],"values":[{"name":"combine","comment":" Compute the largest area of a list of ranges.\n","type":"List.List Elm.Syntax.Range.Range -> Elm.Syntax.Range.Range"},{"name":"compare","comment":" Compare the position of two Ranges.\n","type":"Elm.Syntax.Range.Range -> Elm.Syntax.Range.Range -> Basics.Order"},{"name":"compareLocations","comment":" Compare two Locations.\n","type":"Elm.Syntax.Range.Location -> Elm.Syntax.Range.Location -> Basics.Order"},{"name":"decoder","comment":" Decode a range\n","type":"Json.Decode.Decoder Elm.Syntax.Range.Range"},{"name":"emptyRange","comment":" Construct an empty range\n","type":"Elm.Syntax.Range.Range"},{"name":"encode","comment":" Encode a range\n","type":"Elm.Syntax.Range.Range -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Signature","comment":"\n\n\n# Signature Syntax\n\nFor example :\n\n add : Int -> Int -> Int\n\n\n## Types\n\n@docs Signature\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"Signature","comment":" Type alias representing a signature in Elm.\n","args":[],"type":"{ name : Elm.Syntax.Node.Node String.String, typeAnnotation : Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Signature` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Signature.Signature"},{"name":"encode","comment":" Encode a `Signature` syntax element to JSON.\n","type":"Elm.Syntax.Signature.Signature -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Type","comment":"\n\n\n# Type Syntax\n\nThis syntax represents custom types.\nFor example:\n\n {-| This is a color\n -}\n type Color\n = Blue\n | Red\n\n\n## Types\n\n@docs Type, ValueConstructor\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"Type","comment":" Type alias that defines the syntax for a custom type.\nAll information that you can define in a type alias is embedded.\n","args":[],"type":"{ documentation : Maybe.Maybe (Elm.Syntax.Node.Node Elm.Syntax.Documentation.Documentation), name : Elm.Syntax.Node.Node String.String, generics : List.List (Elm.Syntax.Node.Node String.String), firstConstructor : Elm.Syntax.Node.Node Elm.Syntax.Type.ValueConstructor, restOfConstructors : List.List (Elm.Syntax.Node.Node Elm.Syntax.Type.ValueConstructor) }"},{"name":"ValueConstructor","comment":" Syntax for a custom type value constructor.\n","args":[],"type":"{ name : Elm.Syntax.Node.Node String.String, arguments : List.List (Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation) }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Type` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Type.Type"},{"name":"encode","comment":" Encode a `Type` syntax element to JSON.\n","type":"Elm.Syntax.Type.Type -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.TypeAlias","comment":"\n\n\n# Exposing Syntax\n\nThis syntax represents type aliases.\nFor example:\n\n {-| This is a person\n -}\n type alias Person =\n { name : String\n , age : Int\n }\n\n\n# Types\n\n@docs TypeAlias\n\n\n# Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"TypeAlias","comment":" Type alias that defines the syntax for a type alias.\nA bit meta, but you get the idea. All information that you can define in a type alias is embedded.\n","args":[],"type":"{ documentation : Maybe.Maybe (Elm.Syntax.Node.Node Elm.Syntax.Documentation.Documentation), name : Elm.Syntax.Node.Node String.String, generics : List.List (Elm.Syntax.Node.Node String.String), typeAnnotation : Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Declaration` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.TypeAlias.TypeAlias"},{"name":"encode","comment":" Encode a `TypeAlias` syntax element to JSON.\n","type":"Elm.Syntax.TypeAlias.TypeAlias -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.TypeAnnotation","comment":"\n\n\n# Type Annotation Syntax\n\nThis syntax represents the type annotation syntax.\nFor example:\n\n Int -> String\n\n\n## Types\n\n@docs TypeAnnotation, RecordField\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[{"name":"TypeAnnotation","comment":" Custom type for different type annotations. For example:\n\n - `Var`: `a`\n - `Type`: `Maybe (Int -> String)`\n - `Tuples`: `(a, b, c)` or Unit `()`\n - `Record`: `{ name : String }`\n - `ExtensionRecord`: `{ a | name : String }`\n - `GenericRecord`: `{ a | name : String}`\n - `FunctionTypeAnnotation`: `Int -> String`\n\n","args":[],"cases":[["Var",["String.String"]],["Type",["Elm.Syntax.Node.Node ( Elm.Syntax.ModuleName.ModuleName, String.String )","List.List (Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation)"]],["Tuple",["List.List (Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation)"]],["Record",["List.List (Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.RecordField)"]],["ExtensionRecord",["Elm.Syntax.Node.Node String.String","Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.RecordField","List.List (Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.RecordField)"]],["FunctionTypeAnnotation",["Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation","Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation"]]]}],"aliases":[{"name":"RecordField","comment":" Single field of a record. A name and its type.\n","args":[],"type":"( Elm.Syntax.Node.Node String.String, Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation )"}],"values":[{"name":"decoder","comment":" JSON decoder for a `TypeAnnotation` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.TypeAnnotation.TypeAnnotation"},{"name":"encode","comment":" Encode a `TypeAnnotation` syntax element to JSON.\n","type":"Elm.Syntax.TypeAnnotation.TypeAnnotation -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Writer","comment":"\n\n\n# Elm.Writer\n\nWrite a file to a string.\n\n@docs write, writeFile, writePattern, writeExpression, writeTypeAnnotation, writeDeclaration\n\n","unions":[],"aliases":[],"values":[{"name":"write","comment":" Transform a writer to a string\n","type":"StructuredWriter.Writer -> String.String"},{"name":"writeDeclaration","comment":" Write a declaration\n","type":"Elm.Syntax.Node.Node Elm.Syntax.Declaration.Declaration -> StructuredWriter.Writer"},{"name":"writeExpression","comment":" Writer an expression\n","type":"Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression -> StructuredWriter.Writer"},{"name":"writeFile","comment":" Write a file\n","type":"Elm.Syntax.File.File -> StructuredWriter.Writer"},{"name":"writePattern","comment":" Write a pattern\n","type":"Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern -> StructuredWriter.Writer"},{"name":"writeTypeAnnotation","comment":" Write a type annotation\n","type":"Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation -> StructuredWriter.Writer"}],"binops":[]}] \ No newline at end of file +[{"name":"Elm.Dependency","comment":"\n\n\n# Elm.Dependency\n\nThis module contains types regarding dependencies of a codebase.\nTo gain the most information of a codebase, information of the dependencies may be required.\nFor example, what operators does it define, or what constructors are defined for a custom type.\n\n\n## Types\n\n@docs Dependency, Version\n\n","unions":[],"aliases":[{"name":"Dependency","comment":" Record that represents a dependency. For example:\n\n { name = \"elm/core\"\n , version = \"1.0.0\"\n , interfaces = Dict.fromList [ ( \"Basics\", basicsInterface ), ... ]\n }\n\n","args":[],"type":"{ name : String.String, version : Elm.Dependency.Version, interfaces : Dict.Dict Elm.Syntax.ModuleName.ModuleName Elm.Interface.Interface }"},{"name":"Version","comment":" Alias for a version string. For example \"1.2.3\".\n","args":[],"type":"String.String"}],"values":[],"binops":[]},{"name":"Elm.Interface","comment":"\n\n\n# Elm.Interface\n\nA type that represents the interface for an Elm module.\nYou can see this as a trimmed down version of a file that only contains the header (`module X exposing (..)`) and some small set of additional data.\n\n\n## Types\n\n@docs Interface, Infix, Exposed\n\n\n## Functions\n\n@docs build, exposesAlias, exposesFunction, operators\n\n","unions":[{"name":"Exposed","comment":" Union type for the things that a module can expose. These are `Function`s, `CustomType`s, and `Alias`es.\n\nElm core packages can also define `Operator`s, and thus we take that into account as well.\nThe `Infix` type alias will contain all the information regarding the operator\n\n","args":[],"cases":[["Function",["String.String"]],["CustomType",["( String.String, List.List String.String )"]],["Alias",["String.String"]],["Operator",["Elm.Interface.Infix"]]]}],"aliases":[{"name":"Infix","comment":" Type representing all information regarding an infix operator.\n","args":[],"type":"{ direction : Elm.Syntax.Infix.InfixDirection, precedence : Basics.Int, operator : String.String, function : String.String }"},{"name":"Interface","comment":" An interface is just a list of 'things' that are exposed by a module.\n\n [ Type \"Color\" [ \"Red\", \"Blue\" ], Function \"asRgb\" ]\n\n","args":[],"type":"List.List Elm.Interface.Exposed"}],"values":[{"name":"build","comment":" Build an interface from a file\n","type":"Elm.Internal.RawFile.RawFile -> Elm.Interface.Interface"},{"name":"exposesAlias","comment":" A function to check whether an `Interface` exposes an certain type alias.\n","type":"String.String -> Elm.Interface.Interface -> Basics.Bool"},{"name":"exposesFunction","comment":" Check whether an `Interface` exposes an function.\n\n exposesFunction \"A\" [ Function \"A\", CustomType \"B\", [ \"C\" ] ] == True\n exposesFunction \"B\" [ Function \"A\", CustomType \"B\", [ \"C\" ] ] == False\n exposesFunction \"<\" [ Infix { operator = \"<\" , ... } ] == True\n exposesFunction \"A\" [ Alias \"A\" ] == False\n\n","type":"String.String -> Elm.Interface.Interface -> Basics.Bool"},{"name":"operators","comment":" Retrieve all operators exposed by the `Interface`\n","type":"Elm.Interface.Interface -> List.List Elm.Interface.Infix"}],"binops":[]},{"name":"Elm.Parser","comment":"\n\n\n# Elm Parser\n\n@docs parse\n\n","unions":[],"aliases":[],"values":[{"name":"parse","comment":" Parse some text as if it is an Elm source file.\nWhen parsing fails, the result will contain a list of errors indicating what went wrong (and/or where).\nIf it succeeds, you will get a `RawFile`.\nThis `RawFile` will require some post-processing to properly setup documentation and ensure that operator precedence is applied correctly (based on dependencies).\nTo process a `RawFile`, check out the `Processing` module.\n","type":"String.String -> Result.Result (List.List Parser.DeadEnd) Elm.Internal.RawFile.RawFile"}],"binops":[]},{"name":"Elm.Processing","comment":"\n\n\n# Elm.Processing\n\nProcessing raw files with the context of other files and dependencies.\n\n\n# Types\n\n@docs ProcessContext\n\n\n# Functions\n\n@docs init, addFile, addDependency, process, withWellKnownOperators\n\n","unions":[{"name":"ProcessContext","comment":" Opaque type to hold context for the processing\n","args":[],"cases":[]}],"aliases":[],"values":[{"name":"addDependency","comment":" Add a whole dependency with its modules to the context.\n","type":"Elm.Dependency.Dependency -> Elm.Processing.ProcessContext -> Elm.Processing.ProcessContext"},{"name":"addFile","comment":" Add a file to the context that may be a dependency for the file that will be processed.\n","type":"Elm.Internal.RawFile.RawFile -> Elm.Processing.ProcessContext -> Elm.Processing.ProcessContext"},{"name":"init","comment":" Initialise an empty context\n","type":"Elm.Processing.ProcessContext"},{"name":"process","comment":" Process a rawfile with a context.\nOperator precedence and documentation will be fixed.\n","type":"Elm.Processing.ProcessContext -> Elm.Internal.RawFile.RawFile -> Elm.Syntax.File.File"},{"name":"withWellKnownOperators","comment":" Add all well known operators to the processing context.\nThese include `elm/core`, `elm/url` and `elm/parser`.\n\nAdding these will ensure that the syntax tree is build correctly taking operator precedence into account.\n\n","type":"Elm.Processing.ProcessContext -> Elm.Processing.ProcessContext"}],"binops":[]},{"name":"Elm.RawFile","comment":"\n\n\n# Elm.RawFile\n\n@docs RawFile\n\n@docs moduleName, imports\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"RawFile","comment":" A Raw file\n","args":[],"type":"Elm.Internal.RawFile.RawFile"}],"values":[{"name":"decoder","comment":" JSON decoder for a `RawFile` syntax element.\n","type":"Json.Decode.Decoder Elm.RawFile.RawFile"},{"name":"encode","comment":" Encode a file to a value\n","type":"Elm.RawFile.RawFile -> Json.Encode.Value"},{"name":"imports","comment":" Encode a `RawFile` syntax element to JSON.\n","type":"Elm.RawFile.RawFile -> List.List Elm.Syntax.Import.Import"},{"name":"moduleName","comment":" Retrieve the module name for a raw file\n","type":"Elm.RawFile.RawFile -> Elm.Syntax.ModuleName.ModuleName"}],"binops":[]},{"name":"Elm.Syntax.Comments","comment":"\n\n\n# Comment Syntax\n\nThis syntax represents both single and multi line comments in Elm. For example:\n\n -- A comment\n\n\n\n\n {- Some\n multi\n line\n comment\n -}\n\n\n## Types\n\n@docs Comment\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"Comment","comment":" Type representing the comment syntax\n","args":[],"type":"String.String"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Comment` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Comments.Comment"},{"name":"encode","comment":" Encode a `Comment` syntax element to JSON.\n","type":"Elm.Syntax.Comments.Comment -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Declaration","comment":"\n\n\n# Declarations Syntax\n\nSyntax for the different top-level declarations in Elm.\nThese can be one of the following (all declared in `Declaration`):\n\n - Functions: `add x y = x + y`\n - Custom types: `type Color = Blue | Red`\n - Type aliases: `type alias Status = Int`\n - Port declaration: `port sendMessage: String -> Cmd msg`\n - Infix declarations. You will probably not need this, while only core packages can define these.\n\n\n## Types\n\n@docs Declaration\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[{"name":"Declaration","comment":" Custom type that represents all different top-level declarations.\n","args":[],"cases":[["FunctionDeclaration",["Elm.Syntax.Expression.Function"]],["AliasDeclaration",["Elm.Syntax.TypeAlias.TypeAlias"]],["CustomTypeDeclaration",["Elm.Syntax.Type.Type"]],["PortDeclaration",["Elm.Syntax.Port.Port"]],["InfixDeclaration",["Elm.Syntax.Infix.Infix"]]]}],"aliases":[],"values":[{"name":"decoder","comment":" JSON decoder for a `Declaration` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Declaration.Declaration"},{"name":"encode","comment":" Encode a `Declaration` syntax element to JSON.\n","type":"Elm.Syntax.Declaration.Declaration -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Documentation","comment":"\n\n\n# Documentation Syntax\n\nThis syntax represents documentation comments in Elm.\n\n\n## Types\n\n@docs Documentation\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"Documentation","comment":" Type representing the documentation syntax\n","args":[],"type":"String.String"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Documentation` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Documentation.Documentation"},{"name":"encode","comment":" Encode a `Documentation` syntax element to JSON.\n","type":"Elm.Syntax.Documentation.Documentation -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Exposing","comment":"\n\n\n# Exposing Syntax\n\nThis syntax represents the exposing declaration for both imports and module headers.\nFor example:\n\n exposing (Foo(..))\n exposing (..)\n\n\n# Types\n\n@docs Exposing, TopLevelExpose, ExposedType\n\n\n# Functions\n\n@docs exposesFunction, operators\n\n\n# Serialization\n\n@docs encode, decoder\n\n","unions":[{"name":"Exposing","comment":" Diffent kind of exposing declarations\n","args":[],"cases":[["All",["Elm.Syntax.Range.Range"]],["Explicit",["Elm.Syntax.Node.Node Elm.Syntax.Exposing.TopLevelExpose","List.List (Elm.Syntax.Node.Node Elm.Syntax.Exposing.TopLevelExpose)"]]]},{"name":"TopLevelExpose","comment":" An exposed entity\n","args":[],"cases":[["InfixExpose",["String.String"]],["FunctionExpose",["String.String"]],["TypeOrAliasExpose",["String.String"]],["TypeExpose",["Elm.Syntax.Exposing.ExposedType"]]]}],"aliases":[{"name":"ExposedType","comment":" Exposed Type\n","args":[],"type":"{ name : Elm.Syntax.Node.Node String.String, open : Maybe.Maybe Elm.Syntax.Range.Range }"}],"values":[{"name":"decoder","comment":" JSON decoder for an `Exposing` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Exposing.Exposing"},{"name":"encode","comment":" Encode an `Exposing` syntax element to JSON.\n","type":"Elm.Syntax.Exposing.Exposing -> Json.Encode.Value"},{"name":"exposesFunction","comment":" Check whether an import/module exposing list exposes a certain function. Will yield `True` if `Exposing` is exposing everything (`All`).\n\n exposesFunction \"something\" (All someRange) == True\n\n exposesFunction \"divide\" (Explicit [ Node someRange (FunctionExpose \"add\") ]) == False\n\n exposesFunction \"add\" (Explicit [ Node someRange (FunctionExpose \"add\") ]) == True\n\n","type":"String.String -> Elm.Syntax.Exposing.Exposing -> Basics.Bool"},{"name":"operators","comment":" Collect all operator names from a list of TopLevelExposes\n","type":"List.List Elm.Syntax.Exposing.TopLevelExpose -> List.List String.String"}],"binops":[]},{"name":"Elm.Syntax.Expression","comment":"\n\n\n# Expression Syntax\n\nThis syntax represents all that you can express in Elm.\nAlthough it is a easy and simple language, you can express a lot! See the `Expression` type for all the things you can express.\n\n\n## Types\n\n@docs Expression, Lambda, LetBlock, LetDeclaration, RecordSetter, CaseBlock, Case, Function, FunctionImplementation\n\n\n## Functions\n\n@docs functionRange, isLambda, isLet, isIfElse, isCase, isOperatorApplication\n\n\n## Serialization\n\n@docs encode, encodeFunction, decoder, functionDecoder\n\n","unions":[{"name":"Expression","comment":" Custom type for all expressions such as:\n\n - `Application`: `add a b`\n - `OperatorApplication`: `a + b`\n - `FunctionOrValue`: `add` or `True`\n - `IfBlock`: `if a then b else c`\n - `PrefixOperator`: `(+)`\n - `Operator`: `+`\n - `Integer`: `42`\n - `Hex`: `0x1F`\n - `Floatable`: `42.0`\n - `Negation`: `-a`\n - `Literal`: `\"text\"`\n - `CharLiteral`: `'a'`\n - `TupleExpression`: `()`, `(a)`, `(a, b)`, or `(a, b, c)`\n - `LetExpression`: `let a = 4 in a`\n - `CaseExpression`: `case a of` followed by pattern matches\n - `LambdaExpression`: `(\\a -> a)`\n - `RecordExpr`: `{ name = \"text\" }`\n - `ListExpr`: `[ x, y ]`\n - `RecordAccess`: `a.name`\n - `RecordAccessFunction`: `.name`\n - `RecordUpdateExpression`: `{ a | name = \"text\" }`\n - `GLSLExpression`: `[glsl| ... |]`\n\n","args":[],"cases":[["Application",["Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression","List.List (Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression)"]],["OperatorApplication",["String.String","Elm.Syntax.Infix.InfixDirection","Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression","Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression"]],["FunctionOrValue",["Elm.Syntax.ModuleName.ModuleName","String.String"]],["IfBlock",["Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression","Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression","Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression"]],["PrefixOperator",["String.String"]],["Operator",["String.String"]],["Integer",["Basics.Int"]],["Hex",["Basics.Int"]],["Floatable",["Basics.Float"]],["Negation",["Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression"]],["Literal",["String.String"]],["CharLiteral",["Char.Char"]],["TupleExpression",["List.List (Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression)"]],["LetExpression",["Elm.Syntax.Expression.LetBlock"]],["CaseExpression",["Elm.Syntax.Expression.CaseBlock"]],["LambdaExpression",["Elm.Syntax.Expression.Lambda"]],["RecordExpr",["List.List (Elm.Syntax.Node.Node Elm.Syntax.Expression.RecordSetter)"]],["ListExpr",["List.List (Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression)"]],["RecordAccess",["Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression","Elm.Syntax.Node.Node String.String"]],["RecordAccessFunction",["String.String"]],["RecordUpdateExpression",["Elm.Syntax.Node.Node String.String","Elm.Syntax.Node.Node Elm.Syntax.Expression.RecordSetter","List.List (Elm.Syntax.Node.Node Elm.Syntax.Expression.RecordSetter)"]],["GLSLExpression",["String.String"]]]},{"name":"LetDeclaration","comment":" Union type for all possible declarations in a let block\n","args":[],"cases":[["LetFunction",["Elm.Syntax.Expression.Function"]],["LetDestructuring",["Elm.Syntax.Node.Node Elm.Syntax.DestructurePattern.DestructurePattern","Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression"]]]}],"aliases":[{"name":"Case","comment":" A case in a case block\n","args":[],"type":"( Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern, Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression )"},{"name":"CaseBlock","comment":" Expression for a case block\n","args":[],"type":"{ expression : Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression, firstCase : Elm.Syntax.Expression.Case, restOfCases : List.List Elm.Syntax.Expression.Case }"},{"name":"Function","comment":" Type alias for a full function\n","args":[],"type":"{ documentation : Maybe.Maybe (Elm.Syntax.Node.Node Elm.Syntax.Documentation.Documentation), signature : Maybe.Maybe (Elm.Syntax.Node.Node Elm.Syntax.Signature.Signature), declaration : Elm.Syntax.Node.Node Elm.Syntax.Expression.FunctionImplementation }"},{"name":"FunctionImplementation","comment":" Type alias for a function's implementation\n","args":[],"type":"{ name : Elm.Syntax.Node.Node String.String, arguments : List.List (Elm.Syntax.Node.Node Elm.Syntax.DestructurePattern.DestructurePattern), expression : Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression }"},{"name":"Lambda","comment":" Expression for a lambda\n","args":[],"type":"{ firstArg : Elm.Syntax.Node.Node Elm.Syntax.DestructurePattern.DestructurePattern, restOfArgs : List.List (Elm.Syntax.Node.Node Elm.Syntax.DestructurePattern.DestructurePattern), expression : Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression }"},{"name":"LetBlock","comment":" Expression for a let block\n","args":[],"type":"{ declarations : List.List (Elm.Syntax.Node.Node Elm.Syntax.Expression.LetDeclaration), expression : Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression }"},{"name":"RecordSetter","comment":" Expression for setting a record field\n","args":[],"type":"( Elm.Syntax.Node.Node String.String, Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression )"}],"values":[{"name":"decoder","comment":" JSON decoder for an `Expression` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Expression.Expression"},{"name":"encode","comment":" Encode an `Expression` syntax element to JSON.\n","type":"Elm.Syntax.Expression.Expression -> Json.Encode.Value"},{"name":"encodeFunction","comment":" Encode a `Function` syntax element to JSON.\n","type":"Elm.Syntax.Expression.Function -> Json.Encode.Value"},{"name":"functionDecoder","comment":" JSON decoder for an `Function` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Expression.Function"},{"name":"functionRange","comment":" Get the full range of a function\n","type":"Elm.Syntax.Expression.Function -> Elm.Syntax.Range.Range"},{"name":"isCase","comment":" Check whether an expression is a case-expression\n","type":"Elm.Syntax.Expression.Expression -> Basics.Bool"},{"name":"isIfElse","comment":" Check whether an expression is an if-else-expression\n","type":"Elm.Syntax.Expression.Expression -> Basics.Bool"},{"name":"isLambda","comment":" Check whether an expression is a lambda-expression\n","type":"Elm.Syntax.Expression.Expression -> Basics.Bool"},{"name":"isLet","comment":" Check whether an expression is a let-expression\n","type":"Elm.Syntax.Expression.Expression -> Basics.Bool"},{"name":"isOperatorApplication","comment":" Check whether an expression is an operator appliation expression\n","type":"Elm.Syntax.Expression.Expression -> Basics.Bool"}],"binops":[]},{"name":"Elm.Syntax.File","comment":"\n\n\n# File Syntax\n\nThis syntax represents a whole Elm file.\n\n\n## Types\n\n@docs File\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"File","comment":" Type annotation for a file\n","args":[],"type":"{ moduleDefinition : Elm.Syntax.Node.Node Elm.Syntax.Module.Module, imports : List.List (Elm.Syntax.Node.Node Elm.Syntax.Import.Import), declarations : List.List (Elm.Syntax.Node.Node Elm.Syntax.Declaration.Declaration), comments : List.List (Elm.Syntax.Node.Node Elm.Syntax.Comments.Comment) }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `File` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.File.File"},{"name":"encode","comment":" Encode a `File` syntax element to JSON.\n","type":"Elm.Syntax.File.File -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Import","comment":"\n\n\n# Import Syntax\n\nThis syntax represents imports in Elm.\nFor example:\n\n import Html.Attributes as HA exposing (style)\n\n\n# Types\n\n@docs Import\n\n\n# Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"Import","comment":" Type alias representing an Import\n","args":[],"type":"{ moduleName : Elm.Syntax.Node.Node Elm.Syntax.ModuleName.ModuleName, moduleAlias : Maybe.Maybe (Elm.Syntax.Node.Node String.String), exposingList : Maybe.Maybe (Elm.Syntax.Node.Node Elm.Syntax.Exposing.Exposing) }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Import` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Import.Import"},{"name":"encode","comment":" Encode a `Import` syntax element to JSON.\n","type":"Elm.Syntax.Import.Import -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Infix","comment":" Infix Syntax\n\n#Types\n\n@docs Infix, InfixDirection\n\n\n# Json\n\n@docs encode, encodeDirection, decoder, decodeDirection\n\n","unions":[{"name":"InfixDirection","comment":" Union type for infix direction\n","args":[],"cases":[["Left",[]],["Right",[]],["Non",[]]]}],"aliases":[{"name":"Infix","comment":" Type annotation for a infix definition\n","args":[],"type":"{ direction : Elm.Syntax.Node.Node Elm.Syntax.Infix.InfixDirection, precedence : Elm.Syntax.Node.Node Basics.Int, operator : Elm.Syntax.Node.Node String.String, function : Elm.Syntax.Node.Node String.String }"}],"values":[{"name":"decodeDirection","comment":" Decode a infix direction\n","type":"Json.Decode.Decoder Elm.Syntax.Infix.InfixDirection"},{"name":"decoder","comment":" Decode an infix\n","type":"Json.Decode.Decoder Elm.Syntax.Infix.Infix"},{"name":"encode","comment":" Encode an infix\n","type":"Elm.Syntax.Infix.Infix -> Json.Encode.Value"},{"name":"encodeDirection","comment":" Encode the infix direction\n","type":"Elm.Syntax.Infix.InfixDirection -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Module","comment":"\n\n\n# Module Syntax\n\nThis syntax represents module definitions in Elm.\nFor example:\n\n module Html.Attributes exposing (style)\n\n\n## Module\n\n@docs Module, DefaultModuleData, EffectModuleData\n\n@docs exposingList, moduleName, isPortModule, isEffectModule\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[{"name":"Module","comment":" Union type for different kind of modules\n","args":[],"cases":[["NormalModule",["Elm.Syntax.Module.DefaultModuleData"]],["PortModule",["Elm.Syntax.Module.DefaultModuleData"]],["EffectModule",["Elm.Syntax.Module.EffectModuleData"]]]}],"aliases":[{"name":"DefaultModuleData","comment":" Data for a default default\n","args":[],"type":"{ moduleName : Elm.Syntax.Node.Node Elm.Syntax.ModuleName.ModuleName, exposingList : Elm.Syntax.Node.Node Elm.Syntax.Exposing.Exposing }"},{"name":"EffectModuleData","comment":" Data for an effect module\n","args":[],"type":"{ moduleName : Elm.Syntax.Node.Node Elm.Syntax.ModuleName.ModuleName, exposingList : Elm.Syntax.Node.Node Elm.Syntax.Exposing.Exposing, command : Maybe.Maybe (Elm.Syntax.Node.Node String.String), subscription : Maybe.Maybe (Elm.Syntax.Node.Node String.String) }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Module` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Module.Module"},{"name":"encode","comment":" Encode a `Module` syntax element to JSON.\n","type":"Elm.Syntax.Module.Module -> Json.Encode.Value"},{"name":"exposingList","comment":" Get the exposing list for a module.\n","type":"Elm.Syntax.Module.Module -> Elm.Syntax.Exposing.Exposing"},{"name":"isEffectModule","comment":" Check whether a module is defined as an effect-module\n","type":"Elm.Syntax.Module.Module -> Basics.Bool"},{"name":"isPortModule","comment":" Check whether a module is defined as a port-module\n","type":"Elm.Syntax.Module.Module -> Basics.Bool"},{"name":"moduleName","comment":" Get the name for a module. For older modules this may not be present.\n","type":"Elm.Syntax.Module.Module -> Elm.Syntax.ModuleName.ModuleName"}],"binops":[]},{"name":"Elm.Syntax.ModuleName","comment":"\n\n\n# Module Name Syntax\n\nThis syntax represents the module names in Elm. These can be used for imports, module names (duh), and for qualified access.\nFor example:\n\n module Elm.Syntax.ModuleName ...\n\n import Foo.Bar ...\n\n import ... as Something\n\n My.Module.something\n\n My.Module.SomeType\n\n\n## Types\n\n@docs ModuleName\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"ModuleName","comment":" Base representation for a module name\n","args":[],"type":"List.List String.String"}],"values":[{"name":"decoder","comment":" JSON decoder for a `ModuleName` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.ModuleName.ModuleName"},{"name":"encode","comment":" Encode a `ModuleName` syntax element to JSON.\n","type":"Elm.Syntax.ModuleName.ModuleName -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Node","comment":" Abstract Syntax Nodes\n\n\n# Types\n\n@docs Node\n\n\n# Functions\n\n@docs combine, range, value, map\n\n\n# Serialization\n\n@docs encode, decoder\n\n","unions":[{"name":"Node","comment":" Base representation for a syntax node in a source file.\n","args":["a"],"cases":[["Node",["Elm.Syntax.Range.Range","a"]]]}],"aliases":[],"values":[{"name":"combine","comment":" Combine two nodes, constructing a new node which will have the outer most range of the child nodes\n","type":"(Elm.Syntax.Node.Node a -> Elm.Syntax.Node.Node b -> c) -> Elm.Syntax.Node.Node a -> Elm.Syntax.Node.Node b -> Elm.Syntax.Node.Node c"},{"name":"decoder","comment":" A JSON decoder for `Node`\n","type":"Json.Decode.Decoder a -> Json.Decode.Decoder (Elm.Syntax.Node.Node a)"},{"name":"encode","comment":" Encode a `Node` into JSON\n","type":"(a -> Json.Encode.Value) -> Elm.Syntax.Node.Node a -> Json.Encode.Value"},{"name":"map","comment":" Map the value within a node leaving the range untouched\n","type":"(a -> b) -> Elm.Syntax.Node.Node a -> Elm.Syntax.Node.Node b"},{"name":"range","comment":" Extract the range out of a `Node a`\n","type":"Elm.Syntax.Node.Node a -> Elm.Syntax.Range.Range"},{"name":"value","comment":" Extract the value (`a`) out of a `Node a`\n","type":"Elm.Syntax.Node.Node a -> a"}],"binops":[]},{"name":"Elm.Syntax.Pattern","comment":"\n\n\n# Pattern Syntax\n\nThis syntax represents the patterns.\nFor example:\n\n Just x as someMaybe\n {name, age}\n\n\n# Types\n\n@docs Pattern, QualifiedNameRef\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[{"name":"Pattern","comment":" Custom type for all patterns such as:\n\n - `AllPattern`: `_`\n - `UnitPattern`: `()`\n - `CharPattern`: `'c'`\n - `StringPattern`: `\"hello\"`\n - `IntPattern`: `42`\n - `HexPattern`: `0x11`\n - `FloatPattern`: `42.0`\n - `TuplePattern`: `(a, b)`\n - `RecordPattern`: `{name, age}`\n - `UnConsPattern`: `x :: xs`\n - `ListPattern`: `[ x, y ]`\n - `VarPattern`: `x`\n - `NamedPattern`: `Just _`\n - `AsPattern`: `_ as x`\n - `ParenthesizedPattern`: `( _ )`\n\n","args":[],"cases":[["AllPattern",[]],["UnitPattern",[]],["CharPattern",["Char.Char"]],["StringPattern",["String.String"]],["IntPattern",["Basics.Int"]],["HexPattern",["Basics.Int"]],["TuplePattern",["List.List (Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern)"]],["RecordPattern",["List.List (Elm.Syntax.Node.Node String.String)"]],["UnConsPattern",["Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern","Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern"]],["ListPattern",["List.List (Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern)"]],["VarPattern",["String.String"]],["NamedPattern",["Elm.Syntax.Node.Node Elm.Syntax.Pattern.QualifiedNameRef","List.List (Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern)"]],["AsPattern",["Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern","Elm.Syntax.Node.Node String.String"]],["ParenthesizedPattern",["Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern"]]]}],"aliases":[{"name":"QualifiedNameRef","comment":" Qualified name reference such as `Maybe.Just`.\n","args":[],"type":"{ moduleName : List.List String.String, name : String.String }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Pattern` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Pattern.Pattern"},{"name":"encode","comment":" Encode a `Pattern` syntax element to JSON.\n","type":"Elm.Syntax.Pattern.Pattern -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Range","comment":" Source Code Ranges\n\n\n# Types\n\n@docs Range, Location\n\n\n# Functions\n\n@docs emptyRange, combine\n\n\n# Comparison\n\nSee also [Basics.compare](https://package.elm-lang.org/packages/elm/core/latest/Basics#compare).\n\n@docs compare, compareLocations\n\n\n# Json\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"Location","comment":" Source location\n","args":[],"type":"{ row : Basics.Int, column : Basics.Int }"},{"name":"Range","comment":" Range for a piece of code with a start and end\n","args":[],"type":"{ start : Elm.Syntax.Range.Location, end : Elm.Syntax.Range.Location }"}],"values":[{"name":"combine","comment":" Compute the largest area of a list of ranges.\n","type":"List.List Elm.Syntax.Range.Range -> Elm.Syntax.Range.Range"},{"name":"compare","comment":" Compare the position of two Ranges.\n","type":"Elm.Syntax.Range.Range -> Elm.Syntax.Range.Range -> Basics.Order"},{"name":"compareLocations","comment":" Compare two Locations.\n","type":"Elm.Syntax.Range.Location -> Elm.Syntax.Range.Location -> Basics.Order"},{"name":"decoder","comment":" Decode a range\n","type":"Json.Decode.Decoder Elm.Syntax.Range.Range"},{"name":"emptyRange","comment":" Construct an empty range\n","type":"Elm.Syntax.Range.Range"},{"name":"encode","comment":" Encode a range\n","type":"Elm.Syntax.Range.Range -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Signature","comment":"\n\n\n# Signature Syntax\n\nFor example :\n\n add : Int -> Int -> Int\n\n\n## Types\n\n@docs Signature\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"Signature","comment":" Type alias representing a signature in Elm.\n","args":[],"type":"{ name : Elm.Syntax.Node.Node String.String, typeAnnotation : Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Signature` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Signature.Signature"},{"name":"encode","comment":" Encode a `Signature` syntax element to JSON.\n","type":"Elm.Syntax.Signature.Signature -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.Type","comment":"\n\n\n# Type Syntax\n\nThis syntax represents custom types.\nFor example:\n\n {-| This is a color\n -}\n type Color\n = Blue\n | Red\n\n\n## Types\n\n@docs Type, ValueConstructor\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"Type","comment":" Type alias that defines the syntax for a custom type.\nAll information that you can define in a type alias is embedded.\n","args":[],"type":"{ documentation : Maybe.Maybe (Elm.Syntax.Node.Node Elm.Syntax.Documentation.Documentation), name : Elm.Syntax.Node.Node String.String, generics : List.List (Elm.Syntax.Node.Node String.String), firstConstructor : Elm.Syntax.Node.Node Elm.Syntax.Type.ValueConstructor, restOfConstructors : List.List (Elm.Syntax.Node.Node Elm.Syntax.Type.ValueConstructor) }"},{"name":"ValueConstructor","comment":" Syntax for a custom type value constructor.\n","args":[],"type":"{ name : Elm.Syntax.Node.Node String.String, arguments : List.List (Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation) }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Type` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.Type.Type"},{"name":"encode","comment":" Encode a `Type` syntax element to JSON.\n","type":"Elm.Syntax.Type.Type -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.TypeAlias","comment":"\n\n\n# Exposing Syntax\n\nThis syntax represents type aliases.\nFor example:\n\n {-| This is a person\n -}\n type alias Person =\n { name : String\n , age : Int\n }\n\n\n# Types\n\n@docs TypeAlias\n\n\n# Serialization\n\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"TypeAlias","comment":" Type alias that defines the syntax for a type alias.\nA bit meta, but you get the idea. All information that you can define in a type alias is embedded.\n","args":[],"type":"{ documentation : Maybe.Maybe (Elm.Syntax.Node.Node Elm.Syntax.Documentation.Documentation), name : Elm.Syntax.Node.Node String.String, generics : List.List (Elm.Syntax.Node.Node String.String), typeAnnotation : Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation }"}],"values":[{"name":"decoder","comment":" JSON decoder for a `Declaration` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.TypeAlias.TypeAlias"},{"name":"encode","comment":" Encode a `TypeAlias` syntax element to JSON.\n","type":"Elm.Syntax.TypeAlias.TypeAlias -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Syntax.TypeAnnotation","comment":"\n\n\n# Type Annotation Syntax\n\nThis syntax represents the type annotation syntax.\nFor example:\n\n Int -> String\n\n\n## Types\n\n@docs TypeAnnotation, RecordField\n\n\n## Serialization\n\n@docs encode, decoder\n\n","unions":[{"name":"TypeAnnotation","comment":" Custom type for different type annotations. For example:\n\n - `Var`: `a`\n - `Type`: `Maybe (Int -> String)`\n - `Tuples`: `(a, b, c)` or Unit `()`\n - `Record`: `{ name : String }`\n - `ExtensionRecord`: `{ a | name : String }`\n - `GenericRecord`: `{ a | name : String}`\n - `FunctionTypeAnnotation`: `Int -> String`\n\n","args":[],"cases":[["Var",["String.String"]],["Type",["Elm.Syntax.Node.Node ( Elm.Syntax.ModuleName.ModuleName, String.String )","List.List (Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation)"]],["Tuple",["List.List (Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation)"]],["Record",["List.List (Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.RecordField)"]],["ExtensionRecord",["Elm.Syntax.Node.Node String.String","Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.RecordField","List.List (Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.RecordField)"]],["FunctionTypeAnnotation",["Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation","Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation"]]]}],"aliases":[{"name":"RecordField","comment":" Single field of a record. A name and its type.\n","args":[],"type":"( Elm.Syntax.Node.Node String.String, Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation )"}],"values":[{"name":"decoder","comment":" JSON decoder for a `TypeAnnotation` syntax element.\n","type":"Json.Decode.Decoder Elm.Syntax.TypeAnnotation.TypeAnnotation"},{"name":"encode","comment":" Encode a `TypeAnnotation` syntax element to JSON.\n","type":"Elm.Syntax.TypeAnnotation.TypeAnnotation -> Json.Encode.Value"}],"binops":[]},{"name":"Elm.Writer","comment":"\n\n\n# Elm.Writer\n\nWrite a file to a string.\n\n@docs write, writeFile, writePattern, writeExpression, writeTypeAnnotation, writeDeclaration\n\n","unions":[],"aliases":[],"values":[{"name":"write","comment":" Transform a writer to a string\n","type":"StructuredWriter.Writer -> String.String"},{"name":"writeDeclaration","comment":" Write a declaration\n","type":"Elm.Syntax.Node.Node Elm.Syntax.Declaration.Declaration -> StructuredWriter.Writer"},{"name":"writeExpression","comment":" Writer an expression\n","type":"Elm.Syntax.Node.Node Elm.Syntax.Expression.Expression -> StructuredWriter.Writer"},{"name":"writeFile","comment":" Write a file\n","type":"Elm.Syntax.File.File -> StructuredWriter.Writer"},{"name":"writePattern","comment":" Write a pattern\n","type":"Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern -> StructuredWriter.Writer"},{"name":"writeTypeAnnotation","comment":" Write a type annotation\n","type":"Elm.Syntax.Node.Node Elm.Syntax.TypeAnnotation.TypeAnnotation -> StructuredWriter.Writer"}],"binops":[]}] \ No newline at end of file diff --git a/src/Elm/Parser/Declarations.elm b/src/Elm/Parser/Declarations.elm index f758d7fc9..c7a6dbfd4 100644 --- a/src/Elm/Parser/Declarations.elm +++ b/src/Elm/Parser/Declarations.elm @@ -1,7 +1,7 @@ module Elm.Parser.Declarations exposing (caseBlock, caseStatement, caseStatements, declaration, expression, function, functionArgument, functionSignature, letBlock, letBody, letExpression, signature) import Combine exposing (Parser, choice, lazy, many, maybe, modifyState, or, sepBy1, string, succeed, withLocation) -import Elm.Parser.DestructurePatterns as DestructurPatterns exposing (destructurPattern) +import Elm.Parser.DestructurePatterns as DestructurPatterns exposing (destructurePattern) import Elm.Parser.Infix as Infix import Elm.Parser.Layout as Layout import Elm.Parser.Node as Node @@ -149,7 +149,7 @@ portDeclaration = functionArgument : Parser State (Node DestructurePattern) functionArgument = - DestructurPatterns.destructurPattern + DestructurPatterns.destructurePattern @@ -502,7 +502,7 @@ letBody = let blockElement : Parser State LetDeclaration blockElement = - destructurPattern + destructurePattern |> Combine.andThen (\(Node r p) -> case p of diff --git a/src/Elm/Parser/DestructurePatterns.elm b/src/Elm/Parser/DestructurePatterns.elm index df16c841f..da4fe6dcc 100644 --- a/src/Elm/Parser/DestructurePatterns.elm +++ b/src/Elm/Parser/DestructurePatterns.elm @@ -1,4 +1,4 @@ -module Elm.Parser.DestructurePatterns exposing (destructurPattern) +module Elm.Parser.DestructurePatterns exposing (destructurePattern) import Combine exposing (Parser, between, lazy, many, maybe, parens, sepBy, string) import Elm.Parser.Base as Base @@ -27,8 +27,8 @@ tryToCompose x = ) -destructurPattern : Parser State (Node DestructurePattern) -destructurPattern = +destructurePattern : Parser State (Node DestructurePattern) +destructurePattern = composablePattern |> Combine.andThen tryToCompose @@ -37,7 +37,7 @@ parensPattern = Combine.lazy (\() -> Node.parser - (parens (sepBy (string ",") (Layout.maybeAroundBothSides destructurPattern)) + (parens (sepBy (string ",") (Layout.maybeAroundBothSides destructurePattern)) |> Combine.map (\c -> case c of @@ -100,7 +100,7 @@ qualifiedPattern consumeArgs = (\args -> Node (Range.combine (range :: List.map (\(Node r _) -> r) args)) - (NamedPattern_ (QualifiedNameRef mod name) args) + (NamedPattern_ (Node range (QualifiedNameRef mod name)) args) ) ) diff --git a/src/Elm/Parser/Patterns.elm b/src/Elm/Parser/Patterns.elm index 6721270de..cd3d5c0f1 100644 --- a/src/Elm/Parser/Patterns.elm +++ b/src/Elm/Parser/Patterns.elm @@ -129,7 +129,7 @@ qualifiedPattern consumeArgs = (\args -> Node (Range.combine (range :: List.map (\(Node r _) -> r) args)) - (NamedPattern (QualifiedNameRef mod name) args) + (NamedPattern (Node range (QualifiedNameRef mod name)) args) ) ) diff --git a/src/Elm/Syntax/DestructurePattern.elm b/src/Elm/Syntax/DestructurePattern.elm index ecc99af7c..60001823d 100644 --- a/src/Elm/Syntax/DestructurePattern.elm +++ b/src/Elm/Syntax/DestructurePattern.elm @@ -1,15 +1,9 @@ module Elm.Syntax.DestructurePattern exposing - ( moduleNames + ( DestructurePattern(..) , encode, decoder - , DestructurePattern(..) ) -{-| - - -# Destructur pattern Syntax - -This syntax represents patterns used for destructuring data. +{-| This syntax represents patterns used for destructuring data. For example: Just x as someMaybe @@ -18,12 +12,7 @@ For example: # Types -@docs DestructurPattern - - -## Functions - -@docs moduleNames +@docs DestructurePattern ## Serialization @@ -33,7 +22,7 @@ For example: -} import Elm.Json.Util exposing (decodeTyped, encodeTyped) -import Elm.Syntax.ModuleName as ModuleName exposing (ModuleName) +import Elm.Syntax.ModuleName as ModuleName import Elm.Syntax.Node as Node exposing (Node) import Elm.Syntax.Pattern exposing (QualifiedNameRef) import Json.Decode as JD exposing (Decoder) @@ -58,45 +47,16 @@ type DestructurePattern | TuplePattern_ (List (Node DestructurePattern)) | RecordPattern_ (List (Node String)) | VarPattern_ String - | NamedPattern_ QualifiedNameRef (List (Node DestructurePattern)) + | NamedPattern_ (Node QualifiedNameRef) (List (Node DestructurePattern)) | AsPattern_ (Node DestructurePattern) (Node String) | ParenthesizedPattern_ (Node DestructurePattern) -{-| Get all the modules names that are used in the pattern (and its nested patterns). -Use this to collect qualified patterns, such as `Maybe.Just x`. --} -moduleNames : DestructurePattern -> List ModuleName -moduleNames p = - let - recur = - Node.value >> moduleNames - in - case p of - TuplePattern_ xs -> - List.concatMap recur xs - - RecordPattern_ _ -> - [] - - NamedPattern_ qualifiedNameRef subPatterns -> - qualifiedNameRef.moduleName :: List.concatMap recur subPatterns - - AsPattern_ inner _ -> - recur inner - - ParenthesizedPattern_ inner -> - recur inner - - _ -> - [] - - -- Serialization -{-| Encode a `DestructurPattern` syntax element to JSON. +{-| Encode a `DestructurePattern` syntax element to JSON. -} encode : DestructurePattern -> Value encode pattern = @@ -132,10 +92,14 @@ encode pattern = encodeTyped "named" <| JE.object [ ( "qualified" - , JE.object - [ ( "moduleName", ModuleName.encode qualifiedNameRef.moduleName ) - , ( "name", JE.string qualifiedNameRef.name ) - ] + , Node.encode + (\{ moduleName, name } -> + JE.object + [ ( "moduleName", ModuleName.encode moduleName ) + , ( "name", JE.string name ) + ] + ) + qualifiedNameRef ) , ( "patterns", JE.list (Node.encode encode) patterns ) ] @@ -155,7 +119,7 @@ encode pattern = ) -{-| JSON decoder for a `DestructurPattern` syntax element. +{-| JSON decoder for a `DestructurePattern` syntax element. -} decoder : Decoder DestructurePattern decoder = @@ -167,7 +131,7 @@ decoder = , ( "tuple", JD.field "value" (JD.list (Node.decoder decoder)) |> JD.map TuplePattern_ ) , ( "record", JD.field "value" (JD.list (Node.decoder JD.string)) |> JD.map RecordPattern_ ) , ( "var", JD.field "value" JD.string |> JD.map VarPattern_ ) - , ( "named", JD.map2 NamedPattern_ (JD.field "qualified" decodeQualifiedNameRef) (JD.field "patterns" (JD.list (Node.decoder decoder))) ) + , ( "named", JD.map2 NamedPattern_ (JD.field "qualified" (Node.decoder decodeQualifiedNameRef)) (JD.field "patterns" (JD.list (Node.decoder decoder))) ) , ( "as", JD.map2 AsPattern_ (JD.field "pattern" (Node.decoder decoder)) (JD.field "name" (Node.decoder JD.string)) ) , ( "parentisized", JD.map ParenthesizedPattern_ (JD.field "value" (Node.decoder decoder)) ) ] diff --git a/src/Elm/Syntax/Pattern.elm b/src/Elm/Syntax/Pattern.elm index 67ad57479..80e9957f9 100644 --- a/src/Elm/Syntax/Pattern.elm +++ b/src/Elm/Syntax/Pattern.elm @@ -1,6 +1,5 @@ module Elm.Syntax.Pattern exposing ( Pattern(..), QualifiedNameRef - , moduleNames , encode, decoder ) @@ -21,11 +20,6 @@ For example: @docs Pattern, QualifiedNameRef -## Functions - -@docs moduleNames - - ## Serialization @docs encode, decoder @@ -33,7 +27,7 @@ For example: -} import Elm.Json.Util exposing (decodeTyped, encodeTyped) -import Elm.Syntax.ModuleName as ModuleName exposing (ModuleName) +import Elm.Syntax.ModuleName as ModuleName import Elm.Syntax.Node as Node exposing (Node) import Json.Decode as JD exposing (Decoder) import Json.Encode as JE exposing (Value) @@ -70,7 +64,7 @@ type Pattern | UnConsPattern (Node Pattern) (Node Pattern) | ListPattern (List (Node Pattern)) | VarPattern String - | NamedPattern QualifiedNameRef (List (Node Pattern)) + | NamedPattern (Node QualifiedNameRef) (List (Node Pattern)) | AsPattern (Node Pattern) (Node String) | ParenthesizedPattern (Node Pattern) @@ -83,41 +77,6 @@ type alias QualifiedNameRef = } -{-| Get all the modules names that are used in the pattern (and its nested patterns). -Use this to collect qualified patterns, such as `Maybe.Just x`. --} -moduleNames : Pattern -> List ModuleName -moduleNames p = - let - recur = - Node.value >> moduleNames - in - case p of - TuplePattern xs -> - List.concatMap recur xs - - RecordPattern _ -> - [] - - UnConsPattern left right -> - recur left ++ recur right - - ListPattern xs -> - List.concatMap recur xs - - NamedPattern qualifiedNameRef subPatterns -> - qualifiedNameRef.moduleName :: List.concatMap recur subPatterns - - AsPattern inner _ -> - recur inner - - ParenthesizedPattern inner -> - recur inner - - _ -> - [] - - -- Serialization @@ -201,10 +160,14 @@ encode pattern = encodeTyped "named" <| JE.object [ ( "qualified" - , JE.object - [ ( "moduleName", ModuleName.encode qualifiedNameRef.moduleName ) - , ( "name", JE.string qualifiedNameRef.name ) - ] + , Node.encode + (\{ moduleName, name } -> + JE.object + [ ( "moduleName", ModuleName.encode moduleName ) + , ( "name", JE.string name ) + ] + ) + qualifiedNameRef ) , ( "patterns", JE.list (Node.encode encode) patterns ) ] @@ -242,7 +205,7 @@ decoder = , ( "uncons", JD.map2 UnConsPattern (JD.field "left" (Node.decoder decoder)) (JD.field "right" (Node.decoder decoder)) ) , ( "list", JD.field "value" (JD.list (Node.decoder decoder)) |> JD.map ListPattern ) , ( "var", JD.field "value" JD.string |> JD.map VarPattern ) - , ( "named", JD.map2 NamedPattern (JD.field "qualified" decodeQualifiedNameRef) (JD.field "patterns" (JD.list (Node.decoder decoder))) ) + , ( "named", JD.map2 NamedPattern (JD.field "qualified" (Node.decoder decodeQualifiedNameRef)) (JD.field "patterns" (JD.list (Node.decoder decoder))) ) , ( "as", JD.map2 AsPattern (JD.field "pattern" (Node.decoder decoder)) (JD.field "name" (Node.decoder JD.string)) ) , ( "parentisized", JD.map ParenthesizedPattern (JD.field "value" (Node.decoder decoder)) ) ] diff --git a/src/Elm/Writer.elm b/src/Elm/Writer.elm index 20843ad48..7afcf28ee 100644 --- a/src/Elm/Writer.elm +++ b/src/Elm/Writer.elm @@ -606,7 +606,7 @@ writePattern (Node _ p) = VarPattern var -> string var - NamedPattern qnr others -> + NamedPattern (Node _ qnr) others -> spaced [ writeQualifiedNameRef qnr , spaced (List.map writePattern others) @@ -637,7 +637,7 @@ writeDestructurPattern (Node _ p) = VarPattern_ var -> string var - NamedPattern_ qnr others -> + NamedPattern_ (Node _ qnr) others -> spaced [ writeQualifiedNameRef qnr , spaced (List.map writeDestructurPattern others) diff --git a/tests/Elm/Parser/CaseExpressionTests.elm b/tests/Elm/Parser/CaseExpressionTests.elm index f68b754bd..b946b81a3 100644 --- a/tests/Elm/Parser/CaseExpressionTests.elm +++ b/tests/Elm/Parser/CaseExpressionTests.elm @@ -29,7 +29,7 @@ all = |> Maybe.map (Tuple.mapSecond noRangeExpression >> Tuple.mapFirst noRangePattern) |> Expect.equal (Just - ( Node emptyRange <| NamedPattern (QualifiedNameRef [] "True") [] + ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "True" }) [] , Node emptyRange <| Integer 1 ) ) @@ -39,7 +39,7 @@ all = |> Maybe.map (Tuple.mapSecond noRangeExpression >> Tuple.mapFirst noRangePattern) |> Expect.equal (Just - ( Node emptyRange <| NamedPattern (QualifiedNameRef [ "Foo" ] "Bar") [] + ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [ "Foo" ], name = "Bar" }) [] , Node emptyRange <| Integer 1 ) ) @@ -63,7 +63,7 @@ all = |> Maybe.map (Tuple.mapSecond noRangeExpression >> Tuple.mapFirst noRangePattern) |> Expect.equal (Just - ( Node emptyRange <| NamedPattern (QualifiedNameRef [] "True") [] + ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "True" }) [] , Node emptyRange <| Integer 1 ) ) @@ -78,10 +78,10 @@ all = ) |> Expect.equal (Just - ( ( Node emptyRange <| NamedPattern (QualifiedNameRef [] "True") [] + ( ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "True" }) [] , Node emptyRange <| Integer 1 ) - , [ ( Node emptyRange <| NamedPattern (QualifiedNameRef [] "False") [] + , [ ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "False" }) [] , Node emptyRange <| Integer 2 ) ] @@ -98,13 +98,13 @@ all = ) |> Expect.equal (Just - ( ( Node emptyRange <| NamedPattern (QualifiedNameRef [] "True") [] + ( ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "True" }) [] , Node emptyRange <| Integer 1 ) - , [ ( Node emptyRange <| NamedPattern (QualifiedNameRef [] "False") [] + , [ ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "False" }) [] , Node emptyRange <| Integer 2 ) - , ( Node emptyRange <| NamedPattern (QualifiedNameRef [] "False") [] + , ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "False" }) [] , Node emptyRange <| Integer 3 ) ] @@ -119,11 +119,11 @@ all = (CaseExpression { expression = Node emptyRange <| FunctionOrValue [] "f" , firstCase = - ( Node emptyRange <| NamedPattern (QualifiedNameRef [] "True") [] + ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "True" }) [] , Node emptyRange <| Integer 1 ) , restOfCases = - [ ( Node emptyRange <| NamedPattern (QualifiedNameRef [] "False") [] + [ ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "False" }) [] , Node emptyRange <| Integer 2 ) ] @@ -142,13 +142,21 @@ all = FunctionOrValue [] "f" , firstCase = ( Node { start = { row = 2, column = 3 }, end = { row = 2, column = 7 } } <| - NamedPattern (QualifiedNameRef [] "True") [] + NamedPattern + (Node { start = { row = 2, column = 3 }, end = { row = 2, column = 7 } } + { moduleName = [], name = "True" } + ) + [] , Node { start = { row = 2, column = 11 }, end = { row = 2, column = 12 } } <| Integer 1 ) , restOfCases = [ ( Node { start = { row = 3, column = 3 }, end = { row = 3, column = 8 } } <| - NamedPattern (QualifiedNameRef [] "False") [] + NamedPattern + (Node { start = { row = 3, column = 3 }, end = { row = 3, column = 8 } } + { moduleName = [], name = "False" } + ) + [] , Node { start = { row = 3, column = 12 }, end = { row = 3, column = 13 } } <| Integer 2 ) @@ -169,13 +177,21 @@ all = FunctionOrValue [] "f" , firstCase = ( Node { start = { row = 2, column = 3 }, end = { row = 2, column = 7 } } <| - NamedPattern (QualifiedNameRef [] "True") [] + NamedPattern + (Node { start = { row = 2, column = 3 }, end = { row = 2, column = 7 } } + { moduleName = [], name = "True" } + ) + [] , Node { start = { row = 2, column = 11 }, end = { row = 2, column = 12 } } <| Integer 1 ) , restOfCases = [ ( Node { start = { row = 3, column = 3 }, end = { row = 3, column = 8 } } <| - NamedPattern (QualifiedNameRef [] "False") [] + NamedPattern + (Node { start = { row = 3, column = 3 }, end = { row = 3, column = 8 } } + { moduleName = [], name = "False" } + ) + [] , Node { start = { row = 3, column = 12 }, end = { row = 3, column = 13 } } <| Integer 2 ) @@ -198,7 +214,7 @@ all = (CaseExpression { expression = Node emptyRange <| FunctionOrValue [] "msg" , firstCase = - ( Node emptyRange <| NamedPattern (QualifiedNameRef [] "Increment") [] + ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "Increment" }) [] , Node emptyRange <| Application (Node emptyRange <| FunctionOrValue [] "model") @@ -207,7 +223,7 @@ all = ] ) , restOfCases = - [ ( Node emptyRange <| NamedPattern (QualifiedNameRef [] "Decrement") [] + [ ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "Decrement" }) [] , Node emptyRange <| Application (Node emptyRange <| FunctionOrValue [] "model") diff --git a/tests/Elm/Parser/CombineTestUtil.elm b/tests/Elm/Parser/CombineTestUtil.elm index 4bb580ed8..fe35172d9 100644 --- a/tests/Elm/Parser/CombineTestUtil.elm +++ b/tests/Elm/Parser/CombineTestUtil.elm @@ -160,7 +160,7 @@ noRangePattern (Node r p) = VarPattern x NamedPattern x y -> - NamedPattern x (List.map noRangePattern y) + NamedPattern (unRange x) (List.map noRangePattern y) ParenthesizedPattern x -> ParenthesizedPattern (noRangePattern x) diff --git a/tests/Elm/Parser/DeclarationsTests.elm b/tests/Elm/Parser/DeclarationsTests.elm index c4708825c..1d82942ba 100644 --- a/tests/Elm/Parser/DeclarationsTests.elm +++ b/tests/Elm/Parser/DeclarationsTests.elm @@ -163,7 +163,7 @@ all = Node emptyRange <| CaseExpression { firstCase = - ( Node emptyRange <| NamedPattern { moduleName = [], name = "True" } [] + ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "True" }) [] , Node emptyRange <| FunctionOrValue [] "z" ) , restOfCases = [] @@ -363,7 +363,7 @@ all = CaseExpression { expression = Node emptyRange <| FunctionOrValue [] "msg" , firstCase = - ( Node emptyRange <| NamedPattern (QualifiedNameRef [] "Increment") [] + ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "Increment" }) [] , Node emptyRange <| Application (Node emptyRange <| FunctionOrValue [] "model") @@ -372,7 +372,7 @@ all = ] ) , restOfCases = - [ ( Node emptyRange <| NamedPattern (QualifiedNameRef [] "Decrement") [] + [ ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "Decrement" }) [] , Node emptyRange <| Application (Node emptyRange <| FunctionOrValue [] "model") @@ -552,7 +552,7 @@ all = Node emptyRange <| CaseExpression { firstCase = - ( Node emptyRange <| NamedPattern { moduleName = [], name = "Increment" } [] + ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "Increment" }) [] , Node emptyRange <| Application (Node emptyRange <| FunctionOrValue [] "model") @@ -561,7 +561,7 @@ all = ] ) , restOfCases = - [ ( Node emptyRange <| NamedPattern { moduleName = [], name = "Decrement" } [] + [ ( Node emptyRange <| NamedPattern (Node emptyRange { moduleName = [], name = "Decrement" }) [] , Node emptyRange <| Application (Node emptyRange <| FunctionOrValue [] "model") diff --git a/tests/Elm/Parser/PatternTests.elm b/tests/Elm/Parser/PatternTests.elm index 3730586d3..dc2339987 100644 --- a/tests/Elm/Parser/PatternTests.elm +++ b/tests/Elm/Parser/PatternTests.elm @@ -37,8 +37,13 @@ all = |> Expect.equal (Just (Node (Range (Location 1 1) (Location 1 4)) - (NamedPattern (QualifiedNameRef [] "X") - [ Node (Range (Location 1 3) (Location 1 4)) (VarPattern "x") ] + (NamedPattern + (Node (Range (Location 1 1) (Location 1 2)) + (QualifiedNameRef [] "X") + ) + [ Node (Range (Location 1 3) (Location 1 4)) + (VarPattern "x") + ] ) ) ) @@ -65,8 +70,13 @@ all = (Node (Range (Location 1 1) (Location 1 6)) (ParenthesizedPattern (Node (Range (Location 1 2) (Location 1 5)) - (NamedPattern (QualifiedNameRef [] "X") - [ Node (Range (Location 1 4) (Location 1 5)) (VarPattern "x") ] + (NamedPattern + (Node (Range (Location 1 2) (Location 1 3)) + (QualifiedNameRef [] "X") + ) + [ Node (Range (Location 1 4) (Location 1 5)) + (VarPattern "x") + ] ) ) ) @@ -77,16 +87,24 @@ all = parseFullStringState emptyState "(X x) :: xs" Parser.pattern |> Expect.equal (Just - (Node (Range (Location 1 1) (Location 1 12)) <| - UnConsPattern - (Node (Range (Location 1 1) (Location 1 6)) <| - ParenthesizedPattern - (Node (Range (Location 1 2) (Location 1 5)) <| - NamedPattern (QualifiedNameRef [] "X") + (Node (Range (Location 1 1) (Location 1 12)) + (UnConsPattern + (Node (Range (Location 1 1) (Location 1 6)) + (ParenthesizedPattern + (Node (Range (Location 1 2) (Location 1 5)) + (NamedPattern + (Node (Range (Location 1 2) (Location 1 3)) + (QualifiedNameRef [] "X") + ) [ Node (Range (Location 1 4) (Location 1 5)) <| VarPattern "x" ] + ) ) + ) + ) + (Node (Range (Location 1 10) (Location 1 12)) + (VarPattern "xs") ) - (Node (Range (Location 1 10) (Location 1 12)) <| VarPattern "xs") + ) ) ) , test "int pattern" <| @@ -206,8 +224,17 @@ all = , test "named pattern" <| \() -> parseFullStringState emptyState "True" Parser.pattern - |> Maybe.map noRangePattern - |> Expect.equal (Just (Node emptyRange <| NamedPattern (QualifiedNameRef [] "True") [])) + |> Expect.equal + (Just + (Node (Range (Location 1 1) (Location 1 5)) + (NamedPattern + (Node (Range (Location 1 1) (Location 1 5)) + (QualifiedNameRef [] "True") + ) + [] + ) + ) + ) , test "tuple pattern" <| \() -> parseFullStringState emptyState "(a,{b,c},())" Parser.pattern @@ -229,12 +256,17 @@ all = , test "destructure pattern" <| \() -> parseFullStringState emptyState "Set x" Parser.pattern - |> Maybe.map noRangePattern |> Expect.equal (Just - (Node emptyRange <| - NamedPattern (QualifiedNameRef [] "Set") - [ Node emptyRange <| VarPattern "x" ] + (Node (Range (Location 1 1) (Location 1 6)) + (NamedPattern + (Node (Range (Location 1 1) (Location 1 4)) + (QualifiedNameRef [] "Set") + ) + [ Node (Range (Location 1 5) (Location 1 6)) + (VarPattern "x") + ] + ) ) ) , test "tuple pattern 2" <| @@ -269,20 +301,28 @@ all = , test "complex pattern" <| \() -> parseFullStringState emptyState "(Index irec as index, docVector)" Parser.pattern - |> Maybe.map noRangePattern |> Expect.equal (Just - (Node emptyRange <| - TuplePattern - [ Node emptyRange <| - AsPattern - (Node emptyRange <| - NamedPattern (QualifiedNameRef [] "Index") - [ Node emptyRange <| VarPattern "irec" ] + (Node (Range (Location 1 1) (Location 1 33)) + (TuplePattern + [ Node (Range (Location 1 2) (Location 1 21)) + (AsPattern + (Node (Range (Location 1 2) (Location 1 12)) + (NamedPattern + (Node (Range (Location 1 2) (Location 1 7)) + (QualifiedNameRef [] "Index") + ) + [ Node (Range (Location 1 8) (Location 1 12)) + (VarPattern "irec") + ] + ) ) - (Node emptyRange "index") - , Node emptyRange <| VarPattern "docVector" + (Node (Range (Location 1 16) (Location 1 21)) "index") + ) + , Node (Range (Location 1 23) (Location 1 32)) + (VarPattern "docVector") ] + ) ) ) , test "complex pattern 2" <| @@ -291,25 +331,53 @@ all = |> Maybe.map noRangePattern |> Expect.equal (Just - (Node emptyRange <| - NamedPattern (QualifiedNameRef [] "RBNode_elm_builtin") - [ Node emptyRange <| VarPattern "col" - , Node emptyRange <| - ParenthesizedPattern - (Node emptyRange <| - NamedPattern (QualifiedNameRef [] "RBNode_elm_builtin") - [ Node emptyRange <| NamedPattern (QualifiedNameRef [] "Red") [] - , Node emptyRange <| - ParenthesizedPattern - (Node emptyRange <| - NamedPattern (QualifiedNameRef [] "RBNode_elm_builtin") - [ Node emptyRange <| NamedPattern (QualifiedNameRef [] "Red") [] - , Node emptyRange <| VarPattern "xv" + (Node emptyRange + (NamedPattern + (Node emptyRange + (QualifiedNameRef [] "RBNode_elm_builtin") + ) + [ Node emptyRange + (VarPattern "col") + , Node emptyRange + (ParenthesizedPattern + (Node emptyRange + (NamedPattern + (Node emptyRange + (QualifiedNameRef [] "RBNode_elm_builtin") + ) + [ Node emptyRange + (NamedPattern + (Node emptyRange + (QualifiedNameRef [] "Red") + ) + [] + ) + , Node emptyRange + (ParenthesizedPattern + (Node emptyRange + (NamedPattern + (Node emptyRange + (QualifiedNameRef [] "RBNode_elm_builtin") + ) + [ Node emptyRange + (NamedPattern + (Node emptyRange + (QualifiedNameRef [] "Red") + ) + [] + ) + , Node emptyRange + (VarPattern "xv") ] + ) ) + ) ] + ) ) + ) ] + ) ) ) ]