- Updated the json-swagger plugin to support the 3.x pretter
- Switch the plugin to be JS based to avoid the need to compile via TS
- Simplified plugin to delegate most work to the base estree plugin
- Move swagger plugin source under eng
This commit is contained in:
Wes Haggard 2023-09-06 10:28:49 -07:00 коммит произвёл GitHub
Родитель ebb636f2ff
Коммит 7eaa071780
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
6 изменённых файлов: 41 добавлений и 133 удалений

Просмотреть файл

@ -8,7 +8,7 @@
],
"options": {
"plugins": [
"./scripts/prettier-swagger-plugin"
"./eng/scripts/prettier-swagger-plugin.js"
],
"parser": "json-swagger",
"printWidth": 20,

Просмотреть файл

@ -30,19 +30,9 @@ cd specification/contosowidgetmanager
# Install the dependencies to the local 'node_modules' folder.
npm install
# Compile TypeScript. Compilation will fail, this is expected. But it will compile 'scripts/prettier-swagger-plugin', which is what we need.
npx tsc
# As of 5/25/2023, the prettier version should be 2.1.2
npx prettier --version
# Run 'prettier --check' to verify the problems can be reproduced locally
npx prettier --check **/*.json
# Run 'prettier --list-different' to understand which files have problems.
# Note: there is no way to view the exact problems without actually changing the affected files. See https://github.com/prettier/prettier/issues/6069.
npx prettier --list-different **/*.json
# Run 'prettier --write' to fix the problems.
npx prettier --write **/*.json
```

Просмотреть файл

@ -0,0 +1,33 @@
const plugins_estree = require("prettier/plugins/estree");
const plugins_babel = require("prettier/plugins/babel")
// Customize the standard json-stringify parser from https://github.com/prettier/prettier/blob/50404103ef7d96fb36f8cba1ac7bc40c671fd6cf/src/language-json/parser-json.js
const print = (path, options, print) => {
const node = path.getValue();
if (node.type === "NumericLiteral") {
// Keep numeric literal as-is to allow values to have more then one trailing digit after the decimal like 100.00
return node.extra.raw;
}
return plugins_estree.printers['estree-json'].print(path, options, print);
};
exports.languages = [
{
name: 'json-swagger',
extensions: ['.json'],
parsers: ['json-swagger']
}
];
exports.parsers = {
'json-swagger': {
...plugins_babel.parsers['json-stringify'],
astFormat: 'estree-swagger-customized'
}
};
exports.printers = {
'estree-swagger-customized': {
print
}
};

34
package-lock.json сгенерированный
Просмотреть файл

@ -13,14 +13,13 @@
"@azure-tools/typespec-client-generator-core": "0.33.0",
"@azure-tools/typespec-providerhub": "0.33.0",
"@azure/avocado": "^0.8.4",
"@types/prettier": "^2.7.2",
"@typespec/compiler": "0.47.0",
"@typespec/http": "0.47.0",
"@typespec/openapi": "0.47.0",
"@typespec/rest": "0.47.0",
"@typespec/versioning": "0.47.0",
"azure-rest-api-specs-eng-tools": "file:eng/tools",
"prettier": "^2.8.8",
"prettier": "~3.0.3",
"typescript": "~5.1.3"
}
},
@ -605,12 +604,6 @@
"form-data": "^3.0.0"
}
},
"node_modules/@types/prettier": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz",
"integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
"dev": true
},
"node_modules/@types/retry": {
"version": "0.12.2",
"resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz",
@ -710,21 +703,6 @@
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/@typespec/compiler/node_modules/prettier": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz",
"integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==",
"dev": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/@typespec/compiler/node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@ -1833,15 +1811,15 @@
}
},
"node_modules/prettier": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz",
"integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==",
"dev": true,
"bin": {
"prettier": "bin-prettier.js"
"prettier": "bin/prettier.cjs"
},
"engines": {
"node": ">=10.13.0"
"node": ">=14"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"

Просмотреть файл

@ -7,7 +7,6 @@
"@azure-tools/typespec-azure-resource-manager": "0.33.0",
"@azure-tools/typespec-client-generator-core": "0.33.0",
"@azure-tools/typespec-providerhub": "0.33.0",
"@types/prettier": "^2.7.2",
"@typespec/compiler": "0.47.0",
"@typespec/http": "0.47.0",
"@typespec/openapi": "0.47.0",
@ -15,7 +14,7 @@
"@typespec/versioning": "0.47.0",
"@azure/avocado": "^0.8.4",
"azure-rest-api-specs-eng-tools": "file:eng/tools",
"prettier": "^2.8.8",
"prettier": "~3.0.3",
"typescript": "~5.1.3"
},
"private": true

Просмотреть файл

@ -1,92 +0,0 @@
import { ParserOptions, FastPath, Doc, doc, Plugin, AST } from 'prettier';
import { parsers as bundledParsers } from 'prettier/parser-babel';
const { concat, indent, hardline, join } = doc.builders;
// Modified from https://github.com/prettier/prettier/blob/master/src/language-js/printer-estree-json.js
const print = (path: FastPath, _: ParserOptions, print: (path: FastPath) => Doc): Doc => {
const node = path.getValue();
switch (node.type) {
case "JsonRoot":
return concat([path.call(print, "node"), hardline]);
case "ArrayExpression":
return node.elements.length === 0
? "[]"
: concat([
"[",
indent(
concat([
hardline,
join(concat([",", hardline]), path.map(print, "elements"))
])
),
hardline,
"]"
]);
case "ObjectExpression":
return node.properties.length === 0
? "{}"
: concat([
"{",
indent(
concat([
hardline,
join(concat([",", hardline]), path.map(print, "properties"))
])
),
hardline,
"}"
]);
case "ObjectProperty":
return concat([path.call(print, "key"), ": ", path.call(print, "value")]);
case "UnaryExpression":
return concat([
node.operator === "+" ? "" : node.operator,
path.call(print, "argument")
]);
case "NullLiteral":
return "null";
case "BooleanLiteral":
return node.value ? "true" : "false";
case "StringLiteral":
return JSON.stringify(node.value);
case "NumericLiteral":
// Modified: Keep numeric literal as-is
return node.extra.raw;
case "Identifier":
return JSON.stringify(node.name);
default:
/* istanbul ignore next */
throw new Error("unknown type: " + JSON.stringify(node.type));
}
}
const preprocess = (ast: AST, _: any): AST => {
return Object.assign({}, ast, {
type: "JsonRoot",
node: ast,
comments: []
});
}
export const languages: Plugin['languages'] = [
{
name: 'json-swagger',
extensions: ['.json'],
parsers: ['json-swagger']
}
]
export const parsers = {
'json-swagger': {
...bundledParsers['json-stringify'],
astFormat: 'estree-swagger-customized'
}
};
export const printers = {
'estree-swagger-customized': {
preprocess,
print
}
};