Merge branch 'main' into pr/kortin99/222319

This commit is contained in:
Johannes
2025-12-16 11:31:46 +01:00
4 changed files with 31 additions and 12 deletions

File diff suppressed because one or more lines are too long

View File

@@ -118,7 +118,7 @@ variable ::= '$' var | '${' var }'
| '${' var transform '}'
transform ::= '/' regex '/' (format | text)+ '/' options
format ::= '$' int | '${' int '}'
| '${' int ':' '/upcase' | '/downcase' | '/capitalize' | '/camelcase' | '/pascalcase' | '/kebabcase' '}'
| '${' int ':' '/upcase' | '/downcase' | '/capitalize' | '/camelcase' | '/pascalcase' | '/kebabcase' | '/snakecase' '}'
| '${' int ':+' if '}'
| '${' int ':?' if ':' else '}'
| '${' int ':-' else '}' | '${' int ':' else '}'

View File

@@ -389,6 +389,8 @@ export class FormatString extends Marker {
return !value ? '' : this._toCamelCase(value);
} else if (this.shorthandName === 'kebabcase') {
return !value ? '' : this._toKebabCase(value);
} else if (this.shorthandName === 'snakecase') {
return !value ? '' : this._toSnakeCase(value);
} else if (Boolean(value) && typeof this.ifValue === 'string') {
return this.ifValue;
} else if (!Boolean(value) && typeof this.elseValue === 'string') {
@@ -409,12 +411,18 @@ export class FormatString extends Marker {
.trim()
.toLowerCase()
.replace(/^_+|_+$/g, '')
.replace(/[\s_]+/g, '-')
.replace(/[\s_]+/g, '-');
}
return value
const match2 = value
.trim()
.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)
.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g);
if (!match2) {
return value;
}
return match2
.map(x => x.toLowerCase())
.join('-');
}
@@ -444,6 +452,12 @@ export class FormatString extends Marker {
.join('');
}
private _toSnakeCase(value: string): string {
return value.replace(/([a-z])([A-Z])/g, '$1_$2')
.replace(/[\s\-]+/g, '_')
.toLowerCase();
}
toTextmateString(): string {
let value = '${';
value += this.index;

View File

@@ -677,6 +677,11 @@ suite('SnippetParser', () => {
assert.strictEqual(new FormatString(1, 'kebabcase').resolve('_justPascalCase'), 'just-pascal-case');
assert.strictEqual(new FormatString(1, 'kebabcase').resolve('__UPCASE__'), 'upcase');
assert.strictEqual(new FormatString(1, 'kebabcase').resolve('__BAR_FOO__'), 'bar-foo');
assert.strictEqual(new FormatString(1, 'snakecase').resolve('bar-foo'), 'bar_foo');
assert.strictEqual(new FormatString(1, 'snakecase').resolve('bar-42-foo'), 'bar_42_foo');
assert.strictEqual(new FormatString(1, 'snakecase').resolve('snake_AndPascalCase'), 'snake_and_pascal_case');
assert.strictEqual(new FormatString(1, 'snakecase').resolve('kebab-AndPascalCase'), 'kebab_and_pascal_case');
assert.strictEqual(new FormatString(1, 'snakecase').resolve('_justPascalCase'), '_just_pascal_case');
assert.strictEqual(new FormatString(1, 'notKnown').resolve('input'), 'input');
// if