DreamGUI
Diagnostics

Diagnostics

Every DUInnnn diagnostic: what it means, how it happens, how to fix it.

Every message DreamGUI gives about a .dui carries a code, DUInnnn, and is printed as File.dui(line,col): error DUI3001: …: the file, the line and the column (both counted from 1), the severity, the code, and one sentence that names the offending text -- Settings.dui(12,5): error DUI3001: 'Title' is already the id of the node on line 4, for example. When a Blueprint compiles, they appear in its compiler results. The code is the stable half: one code per cause, the same cause reached from two places keeps one code, and tests assert the code rather than the wording, so the wording stays free to improve; a retired code stays retired and is never given to anything else. The first digit says which stage refused: 1 the lexer (characters that are not a token), 2 the parser (tokens that do not form the grammar), 3 meaning (grammatical, but the tree does not hold together -- a duplicate id, an unknown type), 4 values (a value that does not fit the property it is written on), 5 building the tree (reflection refused the write, or the object to write does not exist), 6 compiling into the Blueprint (the .dui could not be attached to its Blueprint), 7 writing back (the designer could not put an edit into the text).

Severity is decided where a diagnostic is raised, not by its range. Most codes are errors, and an error fails the compile -- a file that does not parse leaves the Blueprint's previous hierarchy where it was rather than blanking it. A few are warnings -- DUI3008, DUI3013, DUI3023, DUI5007, DUI6003 -- where the file compiles and something is still worth a look. The VS Code extension reports the same codes with the same wording: what one file settles on its own (the lexer, brackets, duplicate names and so on) it checks as you type, and the rest reaches its Problems panel through DUI/.dui-diagnostics.json after the Unreal editor compiles; the compiler stays the authority.

The seven families

StageMeaningCodes
DUI1xxxLexerA character sequence that is not a token.7
DUI2xxxParserTokens that do not form the grammar.20
DUI3xxxMeaningGrammatical, but the tree does not hold together: a duplicate id, an unknown type.23
DUI4xxxValuesA value that does not fit the property it is written on.8
DUI5xxxBuilding the treeReflection refused the write, or the target object does not exist.22
DUI6xxxCompilingThe .dui could not be attached to its Blueprint.14
DUI7xxxWrite-backThe designer's edit could not be put into the text.5

Every code

CodeNameSeverityMeaning
DUI1001UnexpectedCharactererrorA character that cannot begin any token.
DUI1002UnterminatedStringerrorA string that reaches the end of its line without its closing quote.
DUI1003UnterminatedCommenterrorA /* that never reaches */.
DUI1004MalformedNumbererrorA number that cannot be read: two decimal points, a trailing dot, a unit glued on (24px).
DUI1005MalformedHexColorerrorA colour whose digit count is not 3, 4, 6 or 8.
DUI1006IdentifierTooLongerrorA name longer than an FName holds.
DUI1007AssetPathTooLongerrorAn asset path longer than an FName holds.
DUI2001UnexpectedTokenerrorA token where the grammar wants something else; the message names both.
DUI2002UnclosedBlockerrorA { with no matching }.
DUI2003UnclosedTupleerrorA ( with no matching ).
DUI2004MissingNodeIderrorA node with neither an id nor a block, or an unnamed node with (was: …).
DUI2005MissingPropertyValueerrorA property with no = or arrow, or nothing after it.
DUI2006MalformedRooterrorNo root node in a file compiled into a class, or more than one.
DUI2007MalformedClassDeclarationerrorclass twice, with an empty path, or inside a node.
DUI2008MalformedWasClauseerror(was: …) holding something other than one id.
DUI2009MalformedKeyOverrideerror@key(…) holding something other than one string, or after a value that is not a string.
DUI2010MalformedLoopHeadererrorA for / each header that is not <keyword> Var in Source or Source().
DUI2011MalformedBindingExpressionerrorThe right side of <-, <-> or an emit's arguments that do not parse.
DUI2012ImportFailederrorA use that could not be honoured: no such file, unreadable, does not parse, or a cycle.
DUI2013NestingTooDeeperrorBlocks or parentheses nested deeper than 256.
DUI2014MalformedTimelineerrorA timeline block or line that is not the grammar.
DUI2015MalformedUseDeclarationerroruse … as without a name, a keyword as the name, or a class path without as.
DUI2016MalformedPropsBlockerrorA props line that is not Type Name or Type Name = value, or props inside a node.
DUI2017MalformedEventsBlockerrorAn events entry that is not Name or Name(Type Param, …), or events inside a node.
DUI2018MalformedConditionalerrorAn if without its condition or block, an else with no if, or a branch holding something other than widgets.
DUI2019MalformedSlotDeclarationerrorA slot with default twice, or a block that both declares and fills.
DUI2020MalformedRowserrorA rows table that does not read: a column list that is not names, a column twice, a row with the wrong number of values.
DUI3001DuplicateNodeIderrorTwo nodes share an id.
DUI3002InvalidNodeIderrorAn id that is not an identifier, starts with a digit, or is a keyword.
DUI3003UnknownNodeTypeerrorA type that is no tag, container, alias, registered widget or path.
DUI3004UnknownStyleerror: Name naming no style this file sees.
DUI3005DuplicateStyleerrorTwo styles of one name in one file.
DUI3006UnknownBehaviourClasserror+ Name naming nothing a widget can carry.
DUI3007DuplicateSlotName_RetirederrorRetired; two slots of one name are DUI3001.
DUI3008ShadowedLoopVariablewarningA loop variable that hides an enclosing loop's (a warning).
DUI3009ParentRefusedChilderrorA parent that will not take this child: a full content widget, a named slot filled twice.
DUI3010RenameOldIdStillInUseerror(was: X) while X is still an id in the file.
DUI3011DuplicateWasIderrorTwo nodes claim (was: X).
DUI3012SelfRenameerror(was: X) on the node called X.
DUI3013RenameGraphReferenceAmbiguouswarningThe old id is also another member's name, so graph references are not moved (a warning).
DUI3014DuplicateResourceerrorTwo resource entries of one name.
DUI3015StyleCycleerrorA style that inherits itself through its bases.
DUI3016DuplicateTimelineerrorTwo timelines of one name.
DUI3017DuplicateComponentAliaserrorTwo use … as lines give one name.
DUI3018AliasShadowsBuiltInerrorA use … as name that is a tag or a container.
DUI3019DuplicateProperrorTwo props lines declare one name.
DUI3020DuplicateEventerrorTwo events entries of one name, or one parameter twice.
DUI3021UnknownNamespaceerrorns.Name whose ns no use … as ns declares.
DUI3022MultipleDefaultSlotserrorMore than one slot … default in one file.
DUI3023DuplicateRowKeywarningWarning. Two rows of a rows table whose first values make the same id; the second's id then moves with the order.
DUI4001UnknownPropertyerrorNo property of that name; the nearest one is suggested.
DUI4002UnknownPropertyPathSegmenterrorA dotted path whose head resolves and whose tail does not.
DUI4003ValueTypeMismatcherrorA value whose shape cannot be the property's type.
DUI4004TupleArityMismatcherrorA tuple with the wrong number of elements.
DUI4005UnknownEnumValueerrorA word the property's enum does not declare.
DUI4006PropertyNotWritableerrorA property text cannot write: transient, deprecated, part of the object graph, a delegate.
DUI4007UnknownResourceerror@Name naming no resource entry.
DUI4008ResourceTypeMismatcherrorA resource whose value is not its declared type, or a non-Asset resource used as a node type.
DUI5001AssetNotFounderrorAn asset or class path that does not load.
DUI5002NoVisualForPropertyerrorA property of a visual the node's type does not create.
DUI5003NoPanelSlotForPropertyerrorA slot line on a node whose parent lays out no panel.
DUI5004BindingFunctionNotFounderrorA bound function the class does not have, or one that takes parameters.
DUI5005BindingTargetHasNoSettererrorA bound property with no setter.
DUI5006NotAUserWidgetClasserrorA node typed by a class that is not a concrete DreamUI user widget.
DUI5007LoopNotExpandedwarningA loop built by a caller with nowhere to record it, and skipped (a warning).
DUI5008BindingTargetNotSupportederrorA binding on something no binding can name: a slot, a container, a field of a struct.
DUI5009NothingToBuilderrorThe tree had no root; the parser said why.
DUI5010EventNotFounderrorX -> … where X is not an event of the destination.
DUI5011BindingExpressionUnsupportederrorAn expression the compiler cannot turn into a function.
DUI5012EachMisplacederrorAn each at the root, nested, without a list view, or without exactly one template.
DUI5013NodeReferenceNotFounderrorA node id written as a value that names no node in the file.
DUI5014LoopBodyBindingUnsupportederrorAn expression or a <-> inside a loop body.
DUI5015TimelineTargetNotFounderrorA track path that names no node.
DUI5016TimelinePropertyNotAnimatableerrorA track property no animation track can drive.
DUI5017UnknownEaseNameerrorAn ease name the tween library does not have.
DUI5018ComponentAliasUnresolvederrorAn alias that names no class: no class line and no Blueprint for the file, or a path that loads nothing.
DUI5019SlotFillOutsideComponenterrorslot Name { … } filling a slot under a node that is not a component instance.
DUI5020UnknownSlotToFillerrorA fill naming a slot the component does not declare.
DUI5021ForMisplacederrorA for at the root, in another loop, in a host with fixed room, or without exactly one template.
DUI5022SecondLayoutContainererrorA second layout container on one node.
DUI6001SourceFileUnreadableerrorThe Blueprint's Source File does not exist or cannot be read.
DUI6002EmptyTreeerrorThe file parsed and produced no tree.
DUI6003ClassPathMismatchwarningThe class line names another Blueprint than the one compiling (a warning).
DUI6004EventHandlerNotFounderror-> Handler naming a function the class does not have.
DUI6005EventHandlerSignatureMismatcherrorA handler whose parameters are not the event's.
DUI6006EachSourceNotFounderrorA loop source the class has neither as a function nor as a variable.
DUI6007EachSourceNotObjectArrayerrorA loop source that is not an array of objects.
DUI6008PropTypeUnknownerrorA props or events type with no Blueprint pin.
DUI6009PropNameTakenerrorA props name another member already has with another type, or a widget's id.
DUI6010EmitUnknownEventerroremit Name of an event this file does not declare.
DUI6011EmitArgumentMismatcherroremit arguments that are not the event's parameters.
DUI6012EmitRouteUnsupportederrorAn emit where no handler can be generated: in a loop body, or for an event Blueprints cannot carry.
DUI6013PropDefaultInvaliderrorA props default its type cannot hold.
DUI6014EventNameTakenerrorAn events name another member of the class already answers to.
DUI7001PatchTargetNotFounderrorA designer edit with no home in the file: an unknown node, a bound property, a slot with no block.
DUI7002SourceFileChangedUnderEditerrorThe file changed under a pending edit; nothing was written.
DUI7003PatchValueNotRepresentableerrorA value the language cannot spell (a non-finite number); its line is left alone.
DUI7004PatchSyntaxNotWritableerrorAn edit to something no line spells: a visibility an if decides, a shorthand that cannot be rewritten.
DUI7005PatchStyleComponentNotWritableerrorAn edit to a value a style's + line gives the node; add the line to the node or change the style.

On this page