MCPcopy
hub / github.com/tailwindlabs/prettier-plugin-tailwindcss / transformDynamicJsAttribute

Function transformDynamicJsAttribute

src/index.ts:93–221  ·  view source on GitHub ↗
(attr: any, env: TransformerEnv)

Source from the content-addressed store, hash-verified

91}
92
93function transformDynamicJsAttribute(attr: any, env: TransformerEnv) {
94 let { matcher } = env
95
96 let expressionPrefix = 'let __prettier_temp__ = '
97 let source = `${expressionPrefix}${attr.value}`
98 let ast = prettierParserBabel.parsers['babel-ts'].parse(source, env.options)
99
100 let didChange = false
101 let changes: StringChange[] = []
102
103 function findConcatEntry(path: Path<any, any>) {
104 return path.find(
105 (entry) => entry.parent?.type === 'BinaryExpression' && entry.parent.operator === '+',
106 )
107 }
108
109 function addChange(
110 start: number | null | undefined,
111 end: number | null | undefined,
112 after: string,
113 ) {
114 if (start == null || end == null) return
115
116 let offsetStart = start - expressionPrefix.length
117 let offsetEnd = end - expressionPrefix.length
118
119 if (offsetStart < 0 || offsetEnd < 0) return
120
121 didChange = true
122 changes.push({
123 start: offsetStart,
124 end: offsetEnd,
125 before: attr.value.slice(offsetStart, offsetEnd),
126 after,
127 })
128 }
129
130 visit(ast, {
131 StringLiteral(node, path) {
132 let concat = findConcatEntry(path)
133 let sorted = sortStringLiteral(node, {
134 env,
135 collapseWhitespace: {
136 start: concat?.key !== 'right',
137 end: concat?.key !== 'left',
138 },
139 })
140
141 if (sorted) {
142 // @ts-ignore
143 let raw = node.extra?.raw ?? node.raw
144 if (typeof raw === 'string') {
145 addChange(node.start, node.end, raw)
146 }
147 }
148 },
149
150 Literal(node: any, path) {

Callers 2

transformHtmlFunction · 0.85
transformAstroFunction · 0.85

Calls 2

visitFunction · 0.85
spliceChangesIntoStringFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…