70 lines
1.5 KiB
JavaScript
70 lines
1.5 KiB
JavaScript
"use strict";
|
|
|
|
const {
|
|
builders: { concat, join, line }
|
|
} = require("../doc");
|
|
|
|
function printHtmlBinding(path, options, print) {
|
|
const node = path.getValue();
|
|
|
|
if (options.__onHtmlBindingRoot && path.getName() === null) {
|
|
options.__onHtmlBindingRoot(node);
|
|
}
|
|
|
|
if (node.type !== "File") {
|
|
return;
|
|
}
|
|
|
|
if (options.__isVueForBindingLeft) {
|
|
return path.call(
|
|
functionDeclarationPath => {
|
|
const { params } = functionDeclarationPath.getValue();
|
|
return concat([
|
|
params.length > 1 ? "(" : "",
|
|
join(
|
|
concat([",", line]),
|
|
functionDeclarationPath.map(print, "params")
|
|
),
|
|
params.length > 1 ? ")" : ""
|
|
]);
|
|
},
|
|
"program",
|
|
"body",
|
|
0
|
|
);
|
|
}
|
|
|
|
if (options.__isVueSlotScope) {
|
|
return path.call(
|
|
functionDeclarationPath =>
|
|
join(concat([",", line]), functionDeclarationPath.map(print, "params")),
|
|
"program",
|
|
"body",
|
|
0
|
|
);
|
|
}
|
|
}
|
|
|
|
// based on https://github.com/prettier/prettier/blob/master/src/language-html/syntax-vue.js isVueEventBindingExpression()
|
|
function isVueEventBindingExpression(node) {
|
|
switch (node.type) {
|
|
case "MemberExpression":
|
|
switch (node.property.type) {
|
|
case "Identifier":
|
|
case "NumericLiteral":
|
|
case "StringLiteral":
|
|
return isVueEventBindingExpression(node.object);
|
|
}
|
|
return false;
|
|
case "Identifier":
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
isVueEventBindingExpression,
|
|
printHtmlBinding
|
|
};
|