Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Unified Diff: pkg/polymer/lib/src/build/messages.dart

Issue 513023002: Step one towards stable error messages with details: (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/polymer/lib/src/build/log_injector.dart ('k') | pkg/polymer/lib/src/build/polyfill_injector.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/polymer/lib/src/build/messages.dart
diff --git a/pkg/polymer/lib/src/build/messages.dart b/pkg/polymer/lib/src/build/messages.dart
new file mode 100644
index 0000000000000000000000000000000000000000..ba20c37aa33e9d2c9f917765e81f3ed83b9b18cc
--- /dev/null
+++ b/pkg/polymer/lib/src/build/messages.dart
@@ -0,0 +1,528 @@
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Contains all error and warning messages produced by polymer.
+library polymer.src.build.messages;
+
+import 'package:code_transformers/messages/messages.dart';
+import 'constants.dart';
+
+const importNotFound = const MessageTemplate(
+ const MessageId('polymer', 1),
+ 'couldn\'t find imported asset "%-path-%" in package "%-package-%".',
+ 'Import not found',
+ '''
+An HTML import seems to be broken. This could be because the file doesn't exist
+or because the link URL is incorrect.
+''');
+
+const duplicateDefinition = const MessageTemplate(
+ const MessageId('polymer', 2),
+ 'duplicate definition for custom tag "%-name-%".%-second-%',
+ 'Duplicate definition',
+ '''
+Custom element names are global and can only be defined once. Some common
+reasons why you might get two definitions:
+
+ * Two different elements are declared with the same name.
+ * A single HTML file defining an element, has been imported using two different
+ URLs.
+''');
+
+const usePolymerHtmlMessage = const MessageTemplate(
+ const MessageId('polymer', 3),
+ 'Missing definition for <polymer-element>, please add the following '
+ 'HTML import at the top of this file: <link rel="import" '
+ 'href="%-reachOutPrefix-%packages/polymer/polymer.html">.',
+ 'Missing import to polymer.html',
+ '''
+Starting with polymer 0.11.0, each file that uses the definition
+of polymer-element must import it either directly or transitively.
+''');
+
+const noImportWithinElement = const MessageTemplate(
+ const MessageId('polymer', 4),
+ 'Polymer.dart\'s implementation of '
+ 'HTML imports are not supported within polymer element definitions, yet. '
+ 'Move the import out of this <polymer-element>.',
+ 'Can\'t use imports inside <polymer-element>',
+ '''
+HTML imports are expected at the top of each document, outside of any
+polymer-element definitions. The polymer build process combines all your HTML
+files together so you can deploy a single HTML file with your application. This
+build process ignores imports that appear to be in the wrong location.
+''');
+
+const useInitDart = const MessageTemplate(
+ const MessageId('polymer', 5),
+ 'To run a polymer application, you need to call `initPolymer()`. You can '
+ 'either include a generic script tag that does this for you:'
+ '\'<script type="application/dart">export "package:polymer/init.dart";'
+ '</script>\' or add your own script tag and call that function. '
+ 'Make sure the script tag is placed after all HTML imports.',
+ 'Missing init.dart',
+ '''
+Your application entry point didn't have any Dart script tags, so it's missing
+some initialization needed for polymer.dart.
+''');
+
+const noDartScriptAndExperimental = const MessageTemplate(
+ const MessageId('polymer', 6),
+ 'The experimental bootstrap feature doesn\'t support script tags on '
+ 'the main document (for now).',
+ 'No script tags with experimental bootstrap',
+ 'This experimental feature is no longer supported.');
+
+const onlyOneTag = const MessageTemplate(
+ const MessageId('polymer', 7),
+ 'Only one "application/dart" script tag per document is allowed.',
+ 'Multiple Dart script tags per document are not supported',
+ '''
+Dartium currently allows only one script tag per document. Any
+additional script tags might be ignored or result in an error. This will
+likely change in the future, but for now, combine the script tags together into
+a single Dart library.
+''');
+
+const moveHtmlImportsUp = const MessageTemplate(
+ const MessageId('polymer', 8),
+ 'Move HTML imports above your Dart script tag.',
+ 'Imports before script tags',
+ '''
+It is good practice to put all your HTML imports at the beginning of the
+document, above any Dart script tags. Today, the execution of Dart script tags
+is not synchronous in Dartium, so the difference is not noticeable. However,
+Dartium that will eventually change and make the timing of script tags execution
+match how they are in Javascript. At that point the order of your imports with
Kathy Walrath 2014/09/04 17:07:28 Javascript -> JavaScript (global)
Siggi Cherem (dart-lang) 2014/09/04 19:55:11 Done.
+respect to script tags will be important. Following the practice of putting
+imports first protects your app from a future breaking change in this respect.
+''');
+
+const missingHref = const MessageTemplate(
+ const MessageId('polymer', 9),
+ 'link rel="%-rel-%" missing href.',
+ 'Missing href on a `<link>` tag',
+ 'All `<link>` tags should have a valid URL to a resource.');
+
+const elementWasDeprecatedEonsAgo = const MessageTemplate(
+ const MessageId('polymer', 10),
+ '<element> elements are not supported, use <polymer-element> instead',
+ '`<element>` is deprecated',
+ '''
+Long ago `<polymer-element>` used to be called `<element>`. You probably ran
+into this error if you were migrating code that was written on a very early
+version of polymer.
+''');
+
+// TODO(jmesserly): this warning is wrong if someone is using raw custom
+// elements. Is there another way we can handle this warning that won't
+// generate false positives?
+const customElementNotFound = const MessageTemplate(
+ const MessageId('polymer', 11),
+ 'custom element with name "%-tag-%" not found.',
+ 'Definition of a custom element not found',
+ '''
+The polymer build was not able to find the definition of a custom element. This
+can happen if an element is defined with a `<polymer-element>` tag, but you are
+missing an HTML import or the import link is incorrect.
+
+This warning can also be a false alarm. For instance, when an element is defined
+programatically using `document.registerElement`. In that case the polymer build
+will not be able to see the definition and will produce this warning.
+''');
+
+const scriptTagSeemsEmpty = const MessageTemplate(
+ const MessageId('polymer', 12),
+ 'script tag seems empty.',
+ 'Empty script tag',
+ 'Script tags should either have a `src` attribute or a non-empty body.');
+
+const wrongScriptTypeExpectedDart = const MessageTemplate(
+ const MessageId('polymer', 13),
+ 'Wrong script type, expected type="application/dart".',
+ 'Expected Dart mime-type',
+'''
+You seem to have a `.dart` extension on a script tag, but the mime-type
+doesn't match `application/dart`.
+''');
+
+const wrongFileTypeExpectedDart = const MessageTemplate(
+ const MessageId('polymer', 14),
+ '"application/dart" scripts should use the .dart file extension.',
+ 'Expected Dart file extension',
+'''
+You are using the `application/dart` mime-type on a script tag, so
+the URL to the script source URL should have a `.dart` extension.
+''');
+
+const foundBothScriptSrcAndBody = const MessageTemplate(
+ const MessageId('polymer', 15),
+ 'script tag has "src" attribute and also has script text.',
+ 'Script with both src and inline text',
+'''
+You have a script tag that includes both a `src` attribute and inline script
+text. You must choose one or the other.
+''');
+
+const incorrectInstantiationMissingBaseTag = const MessageTemplate(
+ const MessageId('polymer', 16),
+ 'custom element "%-tag-%" extends from "%-base-%", but '
+ 'this tag will not include the default properties of "%-base-%". '
+ 'To fix this, either write this tag as <%-base-% '
+ 'is="%-tag-%"> or remove the "extends" attribute from '
+ 'the custom element declaration.',
+ 'Incorrect instantiation: missing base tag in instantiation',
+ '''
+When you declare that a custom element extends from a base tag, for example:
+
+ <polymer-element name="my-example" extends="ul">
+
+or:
+
+ <polymer-element name="my-example2" extends="ul">
+ <polymer-element name="my-example" extends="my-example2">
+
+You should instantiate `my-example` by using this syntax:
+
+ <ul is="my-example">
+
+And not:
+
+ <my-example>
+
+Only elements that don't extend from existing HTML elements are created using
+the latter form.
+
+This is because browsers first create the base element, and then upgrade it to
+have the extra functionality of your custom element. In the example above, using
+`<ul>` tells the browser which base type it must create before
+doing the upgrade.
+''');
+
+const incorrectInstantiationBogusBaseTag = const MessageTemplate(
+ const MessageId('polymer', 17),
+ 'custom element "%-tag-%" doesn\'t declare any type '
+ 'extensions. To fix this, either rewrite this tag as '
+ '<%-tag-%> or add \'extends="%-base-%"\' to '
+ 'the custom element declaration.',
+
+ 'Incorrect instantiation: extra `is` attribute or missing `extends` '
+ 'in declaration',
+ '''
+Creating a custom element using the syntax:
+
+ <ul is="my-example">
+
+means that the declaration of `my-example` extends transitively from `ul`. This
+error message is shown if the definition of `my-example` doesn't declare this
+extension. It might be that you no longer extend from the base element, in which
+case the fix is to change the instantiation to:
+
+ <my-example>
+
+Another possibility is that the declaration needs to be fixed to include the
+`extends` attribute, for example:
+
+ <polymer-element name="my-example" extends="ul">
+''');
+
+const incorrectInstantiationWrongBaseTag = const MessageTemplate(
+ const MessageId('polymer', 18),
+ 'custom element "%-tag-%" extends from "%-base-%". '
+ 'Did you mean to write <%-base-% is="%-tag-%">?',
+ 'Incorrect instantiation: base tag seems wrong',
+ '''
+It seems you have a declaration like:
+
+ <polymer-element name="my-example" extends="div">
+
+but an instantiation like:
+
+ <span is="my-example">
+
+Both the declaration and the instantiation need to match on the base type. So
+either the instantiation needs to be fixed to be more like:
+
+ <span is="my-example">
+
+or the declaration should be fixed to be like:
+
+ <polymer-element name="my-example" extends="span">
+''');
+
+const noDashesInCustomAttributes = const MessageTemplate(
+ const MessageId('polymer', 19),
+ 'PolymerElement no longer recognizes attribute names with '
+ 'dashes such as "%-name-%". Use %-alternative-% '
+ 'instead (both forms are equivalent in HTML).',
+ 'No dashes allowed in custom attributes',
+ '''
+Polymer used to recognize attributes with dashes like `my-name` and convert them
+to match properties where dashes were removed, and words follow the camelCase
+style (for example `myName`). This feature is no longer available. Now simply
+use the same name as the property.
+
+Because HTML attributes are case-insensitive, you can also write the name of
+your property entirely in lowercase. Just be sure that your custom-elements
+don't declare two properties with the same name but different capitalization.
+''');
+
+
+const eventHandlersOnlyWithinPolymerElements = const MessageTemplate(
+ const MessageId('polymer', 20),
+ 'Inline event handlers are only supported inside '
+ 'declarations of <polymer-element>.',
+ 'Event handlers not supported here',
+ '''
+Bindings of the form `{{ }}` are supported inside `<template>` nodes, even outside
+of `<polymer-element>` declarations. However, those bindings only support binding
+values into the content of a node or an attribute.
+
+Inline event handlers of the form `on-click="{{method}}"` are a special feature
+of polymer elements, so they are only supported inside `<polymer-element>`
+definitions.
+''');
+
+const invalidEventHandlerBody = const MessageTemplate(
+ const MessageId('polymer', 21),
+ 'Invalid event handler body "%-value-%". Declare a method '
+ 'in your custom element "void handlerName(event, detail, target)" '
+ 'and use the form %-name-%="{{handlerName}}".',
+ 'No expressions allowed in event handler bindings',
+ '''
+Unlike data bindings, event handler bindings of the form `on-click="{{method}}"`
+are not evaluated as expressions. They are meant to just contain a simple name
+that resolves to a method in your polymer element's class definition.
+''');
+
+const nestedPolymerElementDefinitionsNotAllowed = const MessageTemplate(
+ const MessageId('polymer', 22),
+ 'Nested polymer element definitions are not allowed.',
+ 'Nested polymer element definitions not allowed',
+ '''
+Because custom element names are global, there is no need to have a
+`<polymer-element>` definition nested within a `<polymer-element>`. If you have
+a definition inside another, move the second definition out.
+
+You might see this error if you have an HTML import within a polymer element.
+You should be able to move the import out of the element definition.
+''');
+
+const missingTagName = const MessageTemplate(
+ const MessageId('polymer', 23),
+ 'Missing tag name of the custom element. Include an '
+ 'attribute like \'name="your-tag-name"\'.',
+ 'Polymer element definitions without a name',
+ '''
+Polymer element definitions must have a name. You can include a name by using
+the `name` attribute in `<polymer-element>` for example:
+
+ <polymer-element name="my-example">
+''');
+
+final invalidTagName = new MessageTemplate(
+ const MessageId('polymer', 24),
+ 'Invalid name "%-name-%". Custom element names must have '
+ 'at least one dash (-) and can\'t be any of the following names: '
+ '${invalidTagNames.keys.join(", ")}.',
+ 'Custom element name missing a dash.',
+ '''
+Custom element names must have a dash (`-`) and can\'t be any of the following
+reserved names:
+
+${invalidTagNames.keys.map((e) => ' * `$e`\n').join('')}
+
+''');
+
+final inlineImportFail = const MessageTemplate(
+ const MessageId('polymer', 25),
+ 'Failed to inline HTML import: %-error-%',
+ 'Error while inlining an import',
+ '''
+An error occurred while inlining an import in the polymer build. This is often
+the result of a broken HTML import.
+''');
+
+final inlineStyleFail = const MessageTemplate(
+ const MessageId('polymer', 26),
+ 'Failed to inline stylesheet: %-error-%',
+ 'Error while inlining a stylesheet',
+ '''
+An error occurred while inlining a stylesheet in the polymer build. This is
+often the result of a broken URL in a `<link rel="stylesheet" href="...">`.
+''');
+
+final scriptFileNotFound = const MessageTemplate(
+ const MessageId('polymer', 27),
+ 'Script file at "%-url-%" not found.',
+ 'URL to a script file might be incorrect',
+ '''
+An error occurred trying to read a script tag on a given URL. This is often the
+result of a broken URL in a `<script src="...">`.
+''');
+
+final useUnderscorePrefix = const MessageTemplate(
+ const MessageId('polymer', 28),
+ 'When using bindings with the "%-name-%" attribute you may '
+ 'experience errors in certain browsers. Please use the '
+ '"_%-name-%" attribute instead.',
+ 'Attribute missing "_" prefix',
+ '''
+Not all browsers support bindings to certain attributes, especially URL
+attributes. Some browsers might sanitize attributes and result in an
+incorrect value. For this reason polymer provides a special set of attributes
+that let you bypass any browser internal attribute validation. The name of the
+attribute is the same as the original attribute, but with a leading underscore.
+For example, instead of writing:
+
+ <img src="{{binding}}">
+
+you can write:
+
+ <img _src="{{binding}}">
+
+For more information, see <http://goo.gl/5av8cU>.
+''');
+
+final dontUseUndercorePrefix = const MessageTemplate(
+ const MessageId('polymer', 29),
+ 'The "_%-name-%" attribute is only supported when using bindings. '
+ 'Please change to the "%-name-%" attribute.',
+ 'Attribute with extra "_" prefix',
+ '''
+A special attribute exists to support bindings on URL attributes. For example,
+this correctly binds the `src` attribute in an image:
+
+ <img _src="{{binding}}">
+
+However, this special `_src` attribute is only available for bindings. If you
+just have a URL, use the normal `src` attribute instead.
+''');
+
+final internalErrorDontKnowHowToImport = const MessageTemplate(
+ const MessageId('polymer', 30),
+ "internal error: don't know how to include %-target-% from"
+ " %-source-%.%-extra-%",
+ "Internal error: don't know how to include a URL",
+ '''
+Sorry, you just ran into a bug in the polymer transformer code. Please file a
+bug at <http://dartbug.com/new> including, if possible, some example code that
+can help the team reproduce the issue.
+''');
+
+final internalErrorUnexpectedScript = const MessageTemplate(
+ const MessageId('polymer', 31),
+ 'unexpected script. The ScriptCompactor transformer should run after '
+ 'running the ImportInliner',
+ 'Internal error: phases run out of order',
+ '''
+Sorry, you just ran into a bug in the polymer transformer code. Please file a
+bug at <http://dartbug.com/new> including, if possible, some example code that
+can help the team reproduce the issue.
+''');
+
+final noPrivateCustomTag = const MessageTemplate(
+ const MessageId('polymer', 32),
+ '@CustomTag is not currently supported on private classes:'
+ ' %-name-%. Consider making this class public, or create a '
+ 'public initialization method marked with `@initMethod` that calls '
+ '`Polymer.register(%-name-%, %-className-%)`.',
+ '`@CustomTag` used on a private class',
+ '''
+The `@CustomTag` annotation is currently only supported on public classes. If
+you need to register a custom element whose implementation is a private class
+(that is, a class whose name starts with `_`), you can still do so by invoking
+`Polymer.register` within a public method marked with `@initMethod`.
+''');
+
+final noPrivateInitMethod = const MessageTemplate(
+ const MessageId('polymer', 33),
+ '@initMethod is no longer supported on private functions: %-name-%',
+ '`@initMethod` is on a private function',
+ '''
+The `@initMethod` annotation is currently only supported on public top-level
+functions.
+''');
+
+final missingArgumentInAnnotation = const MessageTemplate(
+ const MessageId('polymer', 34),
+ 'Missing argument in @%-name-% annotation',
+ 'Missing argument in annotation',
+ 'The annotation expects one argument, but the argument was not provided.');
+
+final invalidArgumentInAnnotation = const MessageTemplate(
+ const MessageId('polymer', 35),
+ 'The parameter to @%-name-% seems to be invalid.',
+ 'Invalid argument in annotation',
+ '''
+The polymer transformer was not able to extract a constant value for the
+annotation argument. This can happen if your code is currently in a state that
+can't be analyzed (for example, it has parse errors) or if the expression passed
+as an argument is invalid (for example, it is not a compile-time constant).
+''');
+
+
+final noInitializersError = const MessageTemplate(
+ const MessageId('polymer', 36),
+ 'No polymer initializers were found. Make sure to either '
+ 'annotate your polymer elements with @CustomTag or include a '
+ 'top level method annotated with @initMethod that registers your '
+ 'elements. Both annotations are defined in the polymer library ('
+ 'package:polymer/polymer.dart).',
+ 'No polymer initializers found',
+ '''
+No polymer initializers were found. Make sure to either
+annotate your polymer elements with @CustomTag or include a
+top level method annotated with @initMethod that registers your
+elements. Both annotations are defined in the polymer library (
+package:polymer/polymer.dart).
+''');
+
+final noEventBindingsWithAtExpression = const MessageTemplate(
+ const MessageId('polymer', 37),
+ 'event bindings with @ are no longer supported',
+ 'Event bindings with @ are no longer supported',
+ '''
+For a while there was an undocumented feature that allowed users to include
+expressions in event bindings using the `@` prefix, for example:
+
+ <div on-click="{{@a.b.c}}">
+
+This feature is no longer supported.
+''');
+
+final noPrivateEventHandlers = const MessageTemplate(
+ const MessageId('polymer', 38),
+ 'private symbols cannot be used in event handlers',
+ 'Private symbol in event handler',
+ '''
+Currently private members can't be used in event handler bindings. So you can't
+write:
+
+ <div on-click="{{_method}}">
+
+This restriction might be removed in the future, but for now, you need to make
+your event handlers public.
+''');
+
+final noPrivateSymbolsInBinding = const MessageTemplate(
+ const MessageId('polymer', 39),
+ 'private symbols are not supported',
+ 'Private symbols in a binding expression',
+ '''
+Private members can't be used in binding expressions. For example, you can't
+write:
+
+ <div>{{a.b._c}}</div>
+''');
+
+final html5Warning = const MessageTemplate(
+ const MessageId('polymer', 40),
+ '(from html5lib) %-message-%',
+ 'A warning was found while parsing the HTML document',
+ '''
+The polymer transformer uses a parser that implements the HTML5 spec
+(`html5lib`). This message reports a
+warning that the parser detected.
+''');
« no previous file with comments | « pkg/polymer/lib/src/build/log_injector.dart ('k') | pkg/polymer/lib/src/build/polyfill_injector.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698