Warnings

Globe can produce several types of warnings to highlight possible issues.

XML Warnings

An XML attribute is assigned multiple times
An XML tag specifies the same attribute twice, e.g. <Foo bar="1" bar="2" />.
XML syntax error: a space must appear before an attribute name.
An XML attribute name must be preceded by a space character, e.g. <Foo bar="1"baz="2" />
Widget has an absolute name in a virtual context.
A widget created by an XML template has a fully-specified name; multiple template instantiations will create widgets which share this same name.
Virtual widget has no specified name.
A template without a name cannot be instantiated.
Widget has a relative name and no named ancestors.
$parent was used to name a widget, but would likely not have a value.
Template is already declared by FrameXML.
Template is already declared.
Template is also declared by other addons.
Templates cannot be re-declared, and a warning is raised since patch 8.0.
XML tag not expected in this context.
UI.xsd does not allow this tag to be a child of its parent.
Unrecognized XML tag.
UI.xsd does not describe this tag.
XML tag missing required attribute.
UI.xsd requires this tag must specify a particular attribute.
Invalid XML attribute value (integer expected).
Invalid XML attribute value (number expected)
Invalid XML attribute value (boolean expected).
Invalid XML attribute value.
Invalid XML attribute value (outside allowed numeric range).
UI.xsd specifies constraints on the value of this attribute which were not met.
Unexpected XML attribute.
UI.xsd does not allow this tag to specify this attribute.
XML template loop.
An XML template eventually causes itself to be instantiated.
Failed to parse XML file.
A syntax error is present in the XML file.

Lua warnings

Lua syntax error: break not allowed here.
Lua syntax error: return not allowed here.
Break and return statements must be the last statement in a block; the affected Lua file will error on load. foo = "bar" return -- Finish the rest later! foo = "baz"
Table initialization assigns multiple values to a single key.
e.g. {foo="bar", foo="baz"}
An if statement contains multiple identical conditions.
Multiple if branches have syntactically identical conditions, e.g. if foo then return 1 elseif foo then return 2 end
Table literals are not equal to anything.
Using a table literal as an argument for a comparison operator is wrong (and produces constant output); e.g. if foo == {} then (use next(foo) == nil to check for empty tables)
Function call follows an assignment value list it is not a part of.
This can mean a missing comma: local foo, bar = "foo" GetBar(). Insert a semicolon, comma, or a line break depending on which is appropriate.
Left operand of an AND is trivially truthy.
The left side will never be returned; e.g. foo = "Bar" and 2
Left operand of an OR is trivially truthy.
The right side will never be returned; e.g. foo = "Bar" or "Baz"

TOC/Packaging issues

An AddOn ultimately depends on itself.
The chicken loads first.
A file is loaded multiple times.
Usually not the intended behavior.
A loaded file is of an unknown type.
Include/Script tags infer file type via file extension, and the extension of the referenced file is neither "xml" nor "lua".
Some referenced files were not included in the archive.
Typoed file name, or incomplete archive. Attempting to load non-existing files throws a warning in patch 8.0.
Translated format string contains no tokens.
Localized version of a string does not contain formatting tokens, e.g. L["Foo %s"] = "Bar"
Bad format string translation.
Localized version of a string contains type-incompatible format tokens, which can cause errors when format is called; e.g. L["Foo %s"] = "Foo %d".
Some localization keys are not referenced directly.
Only literal references using the L"Foo" syntax are detected. It is possible that the localization key is used indirectly (e.g. L(foo.text)) or unused.

WoW API warnings

:EnableMouseWheel() called without arguments; this does not enable mouse wheel events.
You likely meant :EnableMouseWheel(true).
:SetFrameStrata() called with an unknown strata name.
:CreateFontString() called with an unknown layer name.
:CreateTexture() called with an unknown layer name.
Check for typos and layer/strata confusion.
:CreateFontString() called with a layer name in place of the widget name.
:CreateTexture() called with a layer name in place of the widget name.
The first argument is the widget's name, not a layer name.

Deprecation warnings

Legion deprecation: consider using PLAYER_SPECIALIZATION_CHANGED instead of ACTIVE_SPECIALIZATION_GROUP_CHANGED.
Legion deprecation: consider using GetSpecialization() instead of GetActiveSpecGroup().
Specialization groups (old dual-spec support) aren't used on live realms.
TitleRegion element has no effect (deprecated in patch 7.1.0).
The region it creates will not allow the frame to be dragged by default.
:SetTexture(r,g,b[,a]) renamed to :SetColorTexture() in patch 7.0.
:SetTexture() now accepts file IDs, but not RGBA components.
PlaySound only accepts SoundKitIDs in patch 7.3.
Calling with a string argument will throw an error.
Deprecated global...
Global aliases provided by Blizzard's deprecation compatibility code will be removed in the future (and are often poor replacements for the original API). Update to the suggested replacement.

Globe style warnings

Globe would like you to use Author, Version, and X-Website .toc fields.
Just so it knows where to send fan-mail!
print() called with a string literal or multiple values (debug output?)
Localized or format strings are expected for non-debug output.
Keeping long-lived local references to API functions is inadvisable.
The warning is included when a localized reference to a WoW API function is used as an upvalue in a function, e.g.local UnitName_ = UnitName local function getTargetName() return UnitName_("target") end This pattern breaks external hooks. If necessary for performance reasons, consider acquiring a new reference immediately prior to use rather than on addon load.