diff --git a/packages/codemirror/themes/algoboy.mjs b/packages/codemirror/themes/algoboy.mjs index 399370e19..eba95b98f 100644 --- a/packages/codemirror/themes/algoboy.mjs +++ b/packages/codemirror/themes/algoboy.mjs @@ -18,6 +18,7 @@ export default createTheme({ theme: 'light', settings, styles: [ + { tag: t.labelName, color: '#0f380f' }, { tag: t.keyword, color: '#0f380f' }, { tag: t.operator, color: '#0f380f' }, { tag: t.special(t.variableName), color: '#0f380f' }, diff --git a/packages/codemirror/themes/blackscreen.mjs b/packages/codemirror/themes/blackscreen.mjs index 135285a37..5671a6d83 100644 --- a/packages/codemirror/themes/blackscreen.mjs +++ b/packages/codemirror/themes/blackscreen.mjs @@ -15,6 +15,7 @@ export default createTheme({ theme: 'dark', settings, styles: [ + { tag: t.labelName, color: 'white' }, { tag: t.keyword, color: 'white' }, { tag: t.operator, color: 'white' }, { tag: t.special(t.variableName), color: 'white' }, diff --git a/packages/codemirror/themes/bluescreen.mjs b/packages/codemirror/themes/bluescreen.mjs index aa6489d6f..eb04c4118 100644 --- a/packages/codemirror/themes/bluescreen.mjs +++ b/packages/codemirror/themes/bluescreen.mjs @@ -18,6 +18,7 @@ export default createTheme({ theme: 'dark', settings, styles: [ + { tag: t.labelName, color: 'white' }, { tag: t.keyword, color: 'white' }, { tag: t.operator, color: 'white' }, { tag: t.special(t.variableName), color: 'white' }, diff --git a/packages/codemirror/themes/strudel-theme.mjs b/packages/codemirror/themes/strudel-theme.mjs index 4ae310609..4ec3ab929 100644 --- a/packages/codemirror/themes/strudel-theme.mjs +++ b/packages/codemirror/themes/strudel-theme.mjs @@ -15,6 +15,7 @@ export default createTheme({ gutterForeground: '#8a919966', }, styles: [ + { tag: t.labelName, color: '#89ddff' }, { tag: t.keyword, color: '#c792ea' }, { tag: t.operator, color: '#89ddff' }, { tag: t.special(t.variableName), color: '#eeffff' }, diff --git a/packages/codemirror/themes/teletext.mjs b/packages/codemirror/themes/teletext.mjs index 5fd9a5570..ddbf7b330 100644 --- a/packages/codemirror/themes/teletext.mjs +++ b/packages/codemirror/themes/teletext.mjs @@ -27,6 +27,7 @@ export default createTheme({ theme: 'dark', settings, styles: [ + { tag: t.labelName, color: colorB }, { tag: t.keyword, color: colorA }, { tag: t.operator, color: mini }, { tag: t.special(t.variableName), color: colorA }, diff --git a/packages/codemirror/themes/terminal.mjs b/packages/codemirror/themes/terminal.mjs index 1374bb867..90c6e1d25 100644 --- a/packages/codemirror/themes/terminal.mjs +++ b/packages/codemirror/themes/terminal.mjs @@ -14,6 +14,7 @@ export default createTheme({ theme: 'dark', settings, styles: [ + { tag: t.labelName, color: '#41FF00' }, { tag: t.keyword, color: '#41FF00' }, { tag: t.operator, color: '#41FF00' }, { tag: t.special(t.variableName), color: '#41FF00' }, diff --git a/packages/codemirror/themes/whitescreen.mjs b/packages/codemirror/themes/whitescreen.mjs index 22abad9e9..5abbb1ea9 100644 --- a/packages/codemirror/themes/whitescreen.mjs +++ b/packages/codemirror/themes/whitescreen.mjs @@ -16,6 +16,7 @@ export default createTheme({ theme: 'light', settings, styles: [ + { tag: t.labelName, color: 'black' }, { tag: t.keyword, color: 'black' }, { tag: t.operator, color: 'black' }, { tag: t.special(t.variableName), color: 'black' }, diff --git a/packages/transpiler/transpiler.mjs b/packages/transpiler/transpiler.mjs index 72f2e8510..a49b353d1 100644 --- a/packages/transpiler/transpiler.mjs +++ b/packages/transpiler/transpiler.mjs @@ -49,6 +49,9 @@ export function transpiler(input, options = {}) { if (isBareSamplesCall(node, parent)) { return this.replace(withAwait(node)); } + if (isLabelStatement(node)) { + return this.replace(labelToP(node)); + } }, leave(node, parent, prop, index) {}, }); @@ -132,3 +135,33 @@ function withAwait(node) { argument: node, }; } + +function isLabelStatement(node) { + return node.type === 'LabeledStatement'; +} + +// converts label expressions to p calls: "x: y" to "y.p('x')" +// see https://github.com/tidalcycles/strudel/issues/990 +function labelToP(node) { + return { + type: 'ExpressionStatement', + expression: { + type: 'CallExpression', + callee: { + type: 'MemberExpression', + object: node.body.expression, + property: { + type: 'Identifier', + name: 'p', + }, + }, + arguments: [ + { + type: 'Literal', + value: node.label.name, + raw: `'${node.label.name}'`, + }, + ], + }, + }; +}