@backtickjs/prettier-plugin 0.1.9 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -56,7 +56,7 @@ A splice of a bare identifier in code prints in its short form (`${name}` become
56
56
 
57
57
  - [`@backtickjs/core`](https://github.com/backtickjs/backtick/tree/main/packages/core): the `cs` tag
58
58
  - [Backtick for VS Code](https://marketplace.visualstudio.com/items?itemName=backtickjs.backtick-vscode): highlighting and type-checking inside scripts
59
- - [How it works](https://backtickjs.com/docs/how-it-works)
59
+ - [How it works](https://backtickjs.com/docs/how-it-works/)
60
60
 
61
61
  ## License
62
62
 
package/dist/index.js CHANGED
@@ -21,12 +21,35 @@ const embed = (path, options) => {
21
21
  };
22
22
  async function printScript(script, fileName, expressions, textToDoc, print) {
23
23
  const parser = parserForFile(fileName);
24
- const docWithPlaceholders = await textToDoc(script.textWithPlaceholders, {
25
- parser,
26
- });
24
+ const docWithPlaceholders = await textToDoc(classAsDeclaration(script) ?? script.textWithPlaceholders, { parser });
27
25
  const body = reinjectSplices(stripTrailingSemicolon(docWithPlaceholders), script, expressions, print);
28
26
  return ["cs", "`", isJsxRoot(script) ? wrapInParens(body) : body, "`"];
29
27
  }
28
+ // A script that is one named class in parentheses, `(class A {})`, as the
29
+ // declaration it's the same class as, `class A {}`. Only parentheses,
30
+ // whitespace and a `;` around it: anything else, a comment, is kept as
31
+ // written. A class without a name has no declaration form.
32
+ function classAsDeclaration(script) {
33
+ const [statement, ...rest] = script.fileWithPlaceholders.statements;
34
+ if (statement === undefined ||
35
+ rest.length > 0 ||
36
+ !ts.isExpressionStatement(statement)) {
37
+ return undefined;
38
+ }
39
+ let root = statement.expression;
40
+ while (ts.isParenthesizedExpression(root)) {
41
+ root = root.expression;
42
+ }
43
+ if (!ts.isClassExpression(root) || root.name === undefined) {
44
+ return undefined;
45
+ }
46
+ const text = script.textWithPlaceholders;
47
+ const start = root.getStart(script.fileWithPlaceholders);
48
+ const around = text.slice(0, start) + text.slice(root.getEnd());
49
+ return /^[\s();]*$/.test(around)
50
+ ? text.slice(start, root.getEnd())
51
+ : undefined;
52
+ }
30
53
  // A script that is one JSX element, parenthesized or not.
31
54
  function isJsxRoot(script) {
32
55
  const [statement, ...rest] = script.fileWithPlaceholders.statements;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backtickjs/prettier-plugin",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "description": "A Prettier plugin that formats the code inside Backtick client scripts",
5
5
  "keywords": [
6
6
  "backtick",
@@ -39,7 +39,7 @@
39
39
  "typescript": "^6.0.3"
40
40
  },
41
41
  "dependencies": {
42
- "@backtickjs/compiler": "^0.1.9"
42
+ "@backtickjs/compiler": "^0.1.11"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "prettier": "^3.0.0",
package/src/index.ts CHANGED
@@ -49,9 +49,10 @@ async function printScript(
49
49
  print: Print,
50
50
  ): Promise<Doc> {
51
51
  const parser = parserForFile(fileName);
52
- const docWithPlaceholders = await textToDoc(script.textWithPlaceholders, {
53
- parser,
54
- });
52
+ const docWithPlaceholders = await textToDoc(
53
+ classAsDeclaration(script) ?? script.textWithPlaceholders,
54
+ { parser },
55
+ );
55
56
  const body = reinjectSplices(
56
57
  stripTrailingSemicolon(docWithPlaceholders),
57
58
  script,
@@ -61,6 +62,34 @@ async function printScript(
61
62
  return ["cs", "`", isJsxRoot(script) ? wrapInParens(body) : body, "`"];
62
63
  }
63
64
 
65
+ // A script that is one named class in parentheses, `(class A {})`, as the
66
+ // declaration it's the same class as, `class A {}`. Only parentheses,
67
+ // whitespace and a `;` around it: anything else, a comment, is kept as
68
+ // written. A class without a name has no declaration form.
69
+ function classAsDeclaration(script: ClientScript): string | undefined {
70
+ const [statement, ...rest] = script.fileWithPlaceholders.statements;
71
+ if (
72
+ statement === undefined ||
73
+ rest.length > 0 ||
74
+ !ts.isExpressionStatement(statement)
75
+ ) {
76
+ return undefined;
77
+ }
78
+ let root = statement.expression;
79
+ while (ts.isParenthesizedExpression(root)) {
80
+ root = root.expression;
81
+ }
82
+ if (!ts.isClassExpression(root) || root.name === undefined) {
83
+ return undefined;
84
+ }
85
+ const text = script.textWithPlaceholders;
86
+ const start = root.getStart(script.fileWithPlaceholders);
87
+ const around = text.slice(0, start) + text.slice(root.getEnd());
88
+ return /^[\s();]*$/.test(around)
89
+ ? text.slice(start, root.getEnd())
90
+ : undefined;
91
+ }
92
+
64
93
  // A script that is one JSX element, parenthesized or not.
65
94
  function isJsxRoot(script: ClientScript): boolean {
66
95
  const [statement, ...rest] = script.fileWithPlaceholders.statements;