@putout/printer 1.32.0 → 1.34.0

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/ChangeLog CHANGED
@@ -1,3 +1,13 @@
1
+ 2023.04.10, v1.34.0
2
+
3
+ feature:
4
+ - d783c21 @putout/printer: improve support of jsx assigned to variable
5
+
6
+ 2023.04.10, v1.33.0
7
+
8
+ feature:
9
+ - 2114f04 @putout/printer: improve support of ArrayExpression tuple: Identifier + Identifier
10
+
1
11
  2023.04.10, v1.32.0
2
12
 
3
13
  feature:
@@ -6,6 +6,7 @@ const {
6
6
  isObjectProperty,
7
7
  isStringLiteral,
8
8
  isArrayExpression,
9
+ isIdentifier,
9
10
  } = require('@babel/types');
10
11
 
11
12
  const {
@@ -17,6 +18,7 @@ const isForOf = ({parentPath}) => parentPath.isForOfStatement();
17
18
  const SECOND = 1;
18
19
  const isStringAndArray = ([a, b]) => isStringLiteral(a) && isArrayExpression(b);
19
20
  const isStringAndString = ([a, b]) => isStringLiteral(a) && isStringLiteral(b);
21
+ const isIdentifierAndIdentifier = ([a, b]) => isIdentifier(a) && isIdentifier(b);
20
22
  const isArrayParent = (path) => path.parentPath.isArrayExpression();
21
23
 
22
24
  const isTwoLongStrings = ([a, b]) => {
@@ -42,7 +44,10 @@ module.exports.ArrayExpression = {
42
44
  if (isCoupleLines(parentPath))
43
45
  return false;
44
46
 
45
- return isStringAndIdentifier(elements);
47
+ if (isStringAndIdentifier(elements))
48
+ return true;
49
+
50
+ return isIdentifierAndIdentifier(elements);
46
51
  },
47
52
  before(path, {print}) {
48
53
  print.breakline();
@@ -97,7 +102,10 @@ module.exports.ArrayExpression = {
97
102
  if (isCoupleLines(parentPath))
98
103
  return false;
99
104
 
100
- return isStringAndIdentifier(elements);
105
+ if (isStringAndIdentifier(elements))
106
+ return true;
107
+
108
+ return isIdentifierAndIdentifier(elements);
101
109
  },
102
110
  after(path, {print, indent}) {
103
111
  indent.dec();
@@ -1,18 +1,29 @@
1
1
  'use strict';
2
2
 
3
3
  const {JSXElement} = require('./jsx-element');
4
+ const {JSXAttribute} = require('./jsx-attribute');
5
+ const {isCoupleLines} = require('../is');
4
6
 
5
7
  module.exports = {
6
8
  JSXElement,
7
- JSXOpeningElement(path, {print}) {
9
+ JSXAttribute,
10
+ JSXOpeningElement(path, {print, maybe}) {
8
11
  print('<');
9
12
  print('__name');
10
13
 
14
+ const noCoupleLine = !isCoupleLines(path);
15
+
11
16
  for (const attr of path.get('attributes')) {
12
- print.space();
17
+ maybe.print.space(noCoupleLine);
13
18
  print(attr);
14
19
  }
15
20
 
21
+ if (isCoupleLines(path))
22
+ print.breakline();
23
+
24
+ if (path.node.selfClosing)
25
+ print('/');
26
+
16
27
  print('>');
17
28
  },
18
29
  JSXExpressionContainer(path, {print}) {
@@ -20,11 +31,6 @@ module.exports = {
20
31
  print('__expression');
21
32
  print('}');
22
33
  },
23
- JSXAttribute(path, {print}) {
24
- print('__name');
25
- print('=');
26
- print('__value');
27
- },
28
34
  JSXIdentifier(path, {write}) {
29
35
  write(path.node.name);
30
36
  },
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ const {isCoupleLines} = require('../is');
4
+
5
+ module.exports.JSXAttribute = {
6
+ condition(path) {
7
+ return isCoupleLines(path.parentPath);
8
+ },
9
+ before(path, {print, indent}) {
10
+ indent.inc();
11
+ print.breakline();
12
+ },
13
+ print(path, {print}) {
14
+ print('__name');
15
+ print('=');
16
+ print('__value');
17
+ },
18
+ after(path, {indent}) {
19
+ indent.dec();
20
+ },
21
+ };
@@ -4,9 +4,8 @@ module.exports.JSXElement = {
4
4
  condition,
5
5
  before(path, {write, indent}) {
6
6
  write('(');
7
- write.breakline();
8
- indent();
9
7
  indent.inc();
8
+ write.breakline();
10
9
  },
11
10
  print(path, {print, traverse}) {
12
11
  print('__openingElement');
@@ -21,5 +20,8 @@ module.exports.JSXElement = {
21
20
  };
22
21
 
23
22
  function condition(path) {
24
- return path.parentPath.isReturnStatement();
23
+ if (path.parentPath.isReturnStatement())
24
+ return true;
25
+
26
+ return path.parentPath.isVariableDeclarator();
25
27
  }
@@ -114,7 +114,12 @@ module.exports.tokenize = (ast, overrides = {}) => {
114
114
  const breakline = () => {
115
115
  addToken({
116
116
  type: TYPES.NEWLINE,
117
- value: `\n${printIndent(i, format.indent)}`,
117
+ value: '\n',
118
+ });
119
+
120
+ addToken({
121
+ type: TYPES.SPACE,
122
+ value: printIndent(i, format.indent),
118
123
  });
119
124
  };
120
125
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@putout/printer",
3
- "version": "1.32.0",
3
+ "version": "1.34.0",
4
4
  "type": "commonjs",
5
5
  "author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
6
6
  "description": "Easiest possible opinionated Babel AST printer made with ❤️ to use in 🐊Putout",