MCPcopy
hub / github.com/webpack/webpack / parseCalculatedString

Method parseCalculatedString

lib/javascript/JavascriptParser.js:4889–4972  ·  view source on GitHub ↗

* Parses calculated string. * @param {Expression} expression expression * @returns {CalculatedStringResult} result

(expression)

Source from the content-addressed store, hash-verified

4887 * @returns {CalculatedStringResult} result
4888 */
4889 parseCalculatedString(expression) {
4890 switch (expression.type) {
4891 case "BinaryExpression":
4892 if (expression.operator === "+") {
4893 const left = this.parseCalculatedString(
4894 /** @type {Expression} */
4895 (expression.left)
4896 );
4897 const right = this.parseCalculatedString(expression.right);
4898 if (left.code) {
4899 return {
4900 range: left.range,
4901 value: left.value,
4902 code: true,
4903 conditional: false
4904 };
4905 } else if (right.code) {
4906 return {
4907 range: [
4908 /** @type {Range} */
4909 (left.range)[0],
4910 right.range
4911 ? right.range[1]
4912 : /** @type {Range} */ (left.range)[1]
4913 ],
4914 value: left.value + right.value,
4915 code: true,
4916 conditional: false
4917 };
4918 }
4919 return {
4920 range: [
4921 /** @type {Range} */
4922 (left.range)[0],
4923 /** @type {Range} */
4924 (right.range)[1]
4925 ],
4926 value: left.value + right.value,
4927 code: false,
4928 conditional: false
4929 };
4930 }
4931 break;
4932 case "ConditionalExpression": {
4933 const consequent = this.parseCalculatedString(expression.consequent);
4934 const alternate = this.parseCalculatedString(expression.alternate);
4935 /** @type {CalculatedStringResult[]} */
4936 const items = [];
4937 if (consequent.conditional) {
4938 items.push(...consequent.conditional);
4939 } else if (!consequent.code) {
4940 items.push(consequent);
4941 } else {
4942 break;
4943 }
4944 if (alternate.conditional) {
4945 items.push(...alternate.conditional);
4946 } else if (!alternate.code) {

Callers 1

Calls 1

pushMethod · 0.45

Tested by

no test coverage detected