MCPcopy Create free account
hub / github.com/babel/babel / parseTemplateElement

Function parseTemplateElement

packages/babel-parser/src/parser/expression.ts:2013–2047  ·  view source on GitHub ↗
(isTagged: boolean)

Source from the content-addressed store, hash-verified

2011 // Parse template expression.
2012
2013 parseTemplateElement(isTagged: boolean): N.TemplateElement {
2014 const { start, startLoc, end, value } = this.state;
2015 const elemStart = start + 1;
2016 const elem = this.startNodeAt<N.TemplateElement>(
2017 createPositionWithColumnOffset(startLoc, 1),
2018 );
2019 if (value === null) {
2020 if (!isTagged) {
2021 this.raise(
2022 Errors.InvalidEscapeSequenceTemplate,
2023 // FIXME: Adding 1 is probably wrong.
2024 createPositionWithColumnOffset(
2025 this.state.firstInvalidTemplateEscapePos!,
2026 1,
2027 ),
2028 );
2029 }
2030 }
2031
2032 const isTail = this.match(tt.templateTail);
2033 const endOffset = isTail ? -1 : -2;
2034 const elemEnd = end + endOffset;
2035 elem.value = {
2036 raw: this.input.slice(elemStart, elemEnd).replace(/\r\n?/g, "\n"),
2037 cooked: value === null ? null : value.slice(1, endOffset),
2038 };
2039 elem.tail = isTail;
2040 this.next();
2041 const finishedNode = this.finishNode(elem, "TemplateElement");
2042 this.resetEndLocation(
2043 finishedNode,
2044 createPositionWithColumnOffset(this.state.lastTokEndLoc!, endOffset),
2045 );
2046 return finishedNode;
2047 }
2048
2049 // https://tc39.es/ecma262/#prod-TemplateLiteral
2050 parseTemplate(this: Parser, isTagged: boolean): N.TemplateLiteral {

Callers

nothing calls this directly

Calls 5

replaceMethod · 0.80
nextMethod · 0.80
finishNodeMethod · 0.80
resetEndLocationMethod · 0.80

Tested by

no test coverage detected