@glimmer/syntax
Version:
85 lines (78 loc) • 6.93 kB
JavaScript
import { SourceSlice } from '../../source/slice';
import { node } from './node';
/**
* Corresponds to a Handlebars literal.
*
* @see {LiteralValue}
*/
export class LiteralExpression extends node('Literal').fields() {
toSlice() {
return new SourceSlice({
loc: this.loc,
chars: this.value
});
}
}
/**
* Returns true if an input {@see ExpressionNode} is a literal.
*/
export function isLiteral(node, kind) {
if (node.type === 'Literal') {
if (kind === undefined) {
return true;
} else if (kind === 'null') {
return node.value === null;
} else {
return typeof node.value === kind;
}
} else {
return false;
}
}
/**
* Corresponds to a path in expression position.
*
* ```hbs
* this
* this.x
* @x
* @x.y
* x
* x.y
* ```
*/
export class PathExpression extends node('Path').fields() {}
/**
* Corresponds to a parenthesized call expression.
*
* ```hbs
* (x)
* (x.y)
* (x y)
* (x.y z)
* ```
*/
export class CallExpression extends node('Call').fields() {}
/**
* Corresponds to a possible deprecated helper call. Must be:
*
* 1. A free variable (not this.foo, not @foo, not local).
* 2. Argument-less.
* 3. In a component invocation's named argument position.
* 4. Not parenthesized (not @bar={{(helper)}}).
* 5. Not interpolated (not @bar="{{helper}}").
*
* ```hbs
* <Foo @bar={{helper}} />
* ```
*/
export class DeprecatedCallExpression extends node('DeprecatedCall').fields() {}
/**
* Corresponds to an interpolation in attribute value position.
*
* ```hbs
* <a href="{{url}}.html"
* ```
*/
export class InterpolateExpression extends node('Interpolate').fields() {}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdjItYS9vYmplY3RzL2V4cHIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsU0FBUyxXQUFULFFBQTRCLG9CQUE1QjtBQUVBLFNBQVMsSUFBVCxRQUFxQixRQUFyQjtBQWtCQTs7Ozs7O0FBS0EsT0FBTSxNQUFPLGlCQUFQLFNBQWlDLElBQUksQ0FBQyxTQUFELENBQUosQ0FBZ0IsTUFBaEIsRUFBakMsQ0FBa0Y7QUFDdEYsRUFBQSxPQUFPLEdBQUE7QUFDTCxXQUFPLElBQUksV0FBSixDQUFnQjtBQUFFLE1BQUEsR0FBRyxFQUFFLEtBQUssR0FBWjtBQUFpQixNQUFBLEtBQUssRUFBRSxLQUFLO0FBQTdCLEtBQWhCLENBQVA7QUFDRDs7QUFIcUY7QUFReEY7Ozs7QUFHQSxPQUFNLFNBQVUsU0FBVixDQUNKLElBREksRUFFSixJQUZJLEVBRUk7QUFFUixNQUFJLElBQUksQ0FBQyxJQUFMLEtBQWMsU0FBbEIsRUFBNkI7QUFDM0IsUUFBSSxJQUFJLEtBQUssU0FBYixFQUF3QjtBQUN0QixhQUFPLElBQVA7QUFDRCxLQUZELE1BRU8sSUFBSSxJQUFJLEtBQUssTUFBYixFQUFxQjtBQUMxQixhQUFPLElBQUksQ0FBQyxLQUFMLEtBQWUsSUFBdEI7QUFDRCxLQUZNLE1BRUE7QUFDTCxhQUFPLE9BQU8sSUFBSSxDQUFDLEtBQVosS0FBc0IsSUFBN0I7QUFDRDtBQUNGLEdBUkQsTUFRTztBQUNMLFdBQU8sS0FBUDtBQUNEO0FBQ0Y7QUFFRDs7Ozs7Ozs7Ozs7OztBQVlBLE9BQU0sTUFBTyxjQUFQLFNBQThCLElBQUksQ0FBQyxNQUFELENBQUosQ0FBYSxNQUFiLEVBQTlCLENBR0Y7QUFFSjs7Ozs7Ozs7Ozs7QUFVQSxPQUFNLE1BQU8sY0FBUCxTQUE4QixJQUFJLENBQUMsTUFBRCxDQUFKLENBQWEsTUFBYixFQUE5QixDQUErRDtBQUVyRTs7Ozs7Ozs7Ozs7Ozs7QUFhQSxPQUFNLE1BQU8sd0JBQVAsU0FBd0MsSUFBSSxDQUFDLGdCQUFELENBQUosQ0FBdUIsTUFBdkIsRUFBeEMsQ0FHRjtBQUVKOzs7Ozs7OztBQU9BLE9BQU0sTUFBTyxxQkFBUCxTQUFxQyxJQUFJLENBQUMsYUFBRCxDQUFKLENBQW9CLE1BQXBCLEVBQXJDLENBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcmVzZW50QXJyYXkgfSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgU291cmNlU2xpY2UgfSBmcm9tICcuLi8uLi9zb3VyY2Uvc2xpY2UnO1xuaW1wb3J0IHR5cGUgeyBDYWxsRmllbGRzIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG5vZGUgfSBmcm9tICcuL25vZGUnO1xuaW1wb3J0IHR5cGUgeyBGcmVlVmFyUmVmZXJlbmNlLCBWYXJpYWJsZVJlZmVyZW5jZSB9IGZyb20gJy4vcmVmcyc7XG5cbi8qKlxuICogQSBIYW5kbGViYXJzIGxpdGVyYWwuXG4gKlxuICoge0BsaW5rIGh0dHBzOi8vaGFuZGxlYmFyc2pzLmNvbS9ndWlkZS9leHByZXNzaW9ucy5odG1sI2xpdGVyYWwtc2VnbWVudHN9XG4gKi9cbmV4cG9ydCB0eXBlIExpdGVyYWxWYWx1ZSA9IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsO1xuXG5leHBvcnQgaW50ZXJmYWNlIExpdGVyYWxUeXBlcyB7XG4gIHN0cmluZzogc3RyaW5nO1xuICBib29sZWFuOiBib29sZWFuO1xuICBudW1iZXI6IG51bWJlcjtcbiAgbnVsbDogbnVsbDtcbiAgdW5kZWZpbmVkOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29ycmVzcG9uZHMgdG8gYSBIYW5kbGViYXJzIGxpdGVyYWwuXG4gKlxuICogQHNlZSB7TGl0ZXJhbFZhbHVlfVxuICovXG5leHBvcnQgY2xhc3MgTGl0ZXJhbEV4cHJlc3Npb24gZXh0ZW5kcyBub2RlKCdMaXRlcmFsJykuZmllbGRzPHsgdmFsdWU6IExpdGVyYWxWYWx1ZSB9PigpIHtcbiAgdG9TbGljZSh0aGlzOiBTdHJpbmdMaXRlcmFsKTogU291cmNlU2xpY2Uge1xuICAgIHJldHVybiBuZXcgU291cmNlU2xpY2UoeyBsb2M6IHRoaXMubG9jLCBjaGFyczogdGhpcy52YWx1ZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBTdHJpbmdMaXRlcmFsID0gTGl0ZXJhbEV4cHJlc3Npb24gJiB7IHZhbHVlOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYW4gaW5wdXQge0BzZWUgRXhwcmVzc2lvbk5vZGV9IGlzIGEgbGl0ZXJhbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGl0ZXJhbDxLIGV4dGVuZHMga2V5b2YgTGl0ZXJhbFR5cGVzID0ga2V5b2YgTGl0ZXJhbFR5cGVzPihcbiAgbm9kZTogRXhwcmVzc2lvbk5vZGUsXG4gIGtpbmQ/OiBLXG4pOiBub2RlIGlzIFN0cmluZ0xpdGVyYWwge1xuICBpZiAobm9kZS50eXBlID09PSAnTGl0ZXJhbCcpIHtcbiAgICBpZiAoa2luZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT09ICdudWxsJykge1xuICAgICAgcmV0dXJuIG5vZGUudmFsdWUgPT09IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygbm9kZS52YWx1ZSA9PT0ga2luZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQ29ycmVzcG9uZHMgdG8gYSBwYXRoIGluIGV4cHJlc3Npb24gcG9zaXRpb24uXG4gKlxuICogYGBgaGJzXG4gKiB0aGlzXG4gKiB0aGlzLnhcbiAqIEB4XG4gKiBAeC55XG4gKiB4XG4gKiB4LnlcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUGF0aEV4cHJlc3Npb24gZXh0ZW5kcyBub2RlKCdQYXRoJykuZmllbGRzPHtcbiAgcmVmOiBWYXJpYWJsZVJlZmVyZW5jZTtcbiAgdGFpbDogcmVhZG9ubHkgU291cmNlU2xpY2VbXTtcbn0+KCkge31cblxuLyoqXG4gKiBDb3JyZXNwb25kcyB0byBhIHBhcmVudGhlc2l6ZWQgY2FsbCBleHByZXNzaW9uLlxuICpcbiAqIGBgYGhic1xuICogKHgpXG4gKiAoeC55KVxuICogKHggeSlcbiAqICh4LnkgeilcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQ2FsbEV4cHJlc3Npb24gZXh0ZW5kcyBub2RlKCdDYWxsJykuZmllbGRzPENhbGxGaWVsZHM+KCkge31cblxuLyoqXG4gKiBDb3JyZXNwb25kcyB0byBhIHBvc3NpYmxlIGRlcHJlY2F0ZWQgaGVscGVyIGNhbGwuIE11c3QgYmU6XG4gKlxuICogMS4gQSBmcmVlIHZhcmlhYmxlIChub3QgdGhpcy5mb28sIG5vdCBAZm9vLCBub3QgbG9jYWwpLlxuICogMi4gQXJndW1lbnQtbGVzcy5cbiAqIDMuIEluIGEgY29tcG9uZW50IGludm9jYXRpb24ncyBuYW1lZCBhcmd1bWVudCBwb3NpdGlvbi5cbiAqIDQuIE5vdCBwYXJlbnRoZXNpemVkIChub3QgQGJhcj17eyhoZWxwZXIpfX0pLlxuICogNS4gTm90IGludGVycG9sYXRlZCAobm90IEBiYXI9XCJ7e2hlbHBlcn19XCIpLlxuICpcbiAqIGBgYGhic1xuICogPEZvbyBAYmFyPXt7aGVscGVyfX0gLz5cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgRGVwcmVjYXRlZENhbGxFeHByZXNzaW9uIGV4dGVuZHMgbm9kZSgnRGVwcmVjYXRlZENhbGwnKS5maWVsZHM8e1xuICBhcmc6IFNvdXJjZVNsaWNlO1xuICBjYWxsZWU6IEZyZWVWYXJSZWZlcmVuY2U7XG59PigpIHt9XG5cbi8qKlxuICogQ29ycmVzcG9uZHMgdG8gYW4gaW50ZXJwb2xhdGlvbiBpbiBhdHRyaWJ1dGUgdmFsdWUgcG9zaXRpb24uXG4gKlxuICogYGBgaGJzXG4gKiA8YSBocmVmPVwie3t1cmx9fS5odG1sXCJcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgSW50ZXJwb2xhdGVFeHByZXNzaW9uIGV4dGVuZHMgbm9kZSgnSW50ZXJwb2xhdGUnKS5maWVsZHM8e1xuICBwYXJ0czogUHJlc2VudEFycmF5PEV4cHJlc3Npb25Ob2RlPjtcbn0+KCkge31cblxuZXhwb3J0IHR5cGUgRXhwcmVzc2lvbk5vZGUgPVxuICB8IExpdGVyYWxFeHByZXNzaW9uXG4gIHwgUGF0aEV4cHJlc3Npb25cbiAgfCBDYWxsRXhwcmVzc2lvblxuICB8IERlcHJlY2F0ZWRDYWxsRXhwcmVzc2lvblxuICB8IEludGVycG9sYXRlRXhwcmVzc2lvbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=