diff --git a/CHANGELOG.md b/CHANGELOG.md index 26eadd2..b4d400f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 6.4.0 - February 11, 2023 +* (refs [#51](https://github.com/pascalre/vscode-yaml-sort/issues/51)) Add support for sorting arrays +* Add setting `sortArrays` +* Update dependencies to latest versions + ## 6.3.0 - February 6, 2023 * (refs [#27](https://github.com/pascalre/vscode-yaml-sort/issues/36)) Add support for octal values * Update dependencies to latest versions diff --git a/README.md b/README.md index c057a81..dc38fa7 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ This extension contributes the following settings: | `notifySuccess` | When `true`, will notify on successfully performed tasks. | `true` | | `quotingType` | Strings will be quoted using this quoting style. If you specify single quotes, double quotes will still be used for non-printable characters. | `'` | | `schema` | Schema to use. Possible values are `HOMEASSISTANT_SCHEMA`, `CLOUDFORMATION_SCHEMA`, `CORE_SCHEMA`, `DEFAULT_SCHEMA`, `FAILSAFE_SCHEMA`, `JSON_SCHEMA`. | `DEFAULT_SCHEMA` | +| `sortArrays` | "When `true`, will sort arrays | `false` | | `sortOnSave` | When `0`, will sort files when saving document. When `1`, `2` or `3`, will use customSortKeywords. Set to negative value to disable sortOnSave. Only works in combination with `editor.formatOnSave` set to `true`. | `0` | | `useAsFormatter` | When `true`, will enable default YAML formatter (requires restart). | `false` | | `useCustomSortRecursively` | When `true`, will use the custom sort keywords recursively on a file, when using custom sort. | `false` | diff --git a/package-lock.json b/package-lock.json index c0bcc58..55c24d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-yaml-sort", - "version": "6.2.0", + "version": "6.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-yaml-sort", - "version": "6.2.0", + "version": "6.3.0", "license": "MIT", "dependencies": { "@types/glob": "^8.0.0", @@ -20,18 +20,18 @@ }, "devDependencies": { "@types/mocha": "10.0.1", - "@types/node": "^18.11.19", + "@types/node": "^18.13.0", "@types/sinon": "^10.0.13", "@typescript-eslint/eslint-plugin": "^5.48.2", "@typescript-eslint/parser": "^5.48.2", "coveralls": "3.1.1", - "dependency-cruiser": "^12.5.0", - "eslint": "^8.32.0", + "dependency-cruiser": "^12.7.1", + "eslint": "^8.34.0", "jsdoc": "4.0.0", "mocha": "^10.2.0", "nyc": "15.1.0", "sinon": "^15.0.1", - "sonarqube-scanner": "^3.0.0", + "sonarqube-scanner": "^3.0.1", "ts-node": "10.9.1", "typescript": "^4.9.5", "typescript-require": "0.3.0" @@ -877,9 +877,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.19.tgz", - "integrity": "sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw==" + "version": "18.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz", + "integrity": "sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==" }, "node_modules/@types/semver": { "version": "7.3.13", @@ -2062,9 +2062,9 @@ } }, "node_modules/dependency-cruiser": { - "version": "12.7.0", - "resolved": "https://registry.npmjs.org/dependency-cruiser/-/dependency-cruiser-12.7.0.tgz", - "integrity": "sha512-5oq4nhJ2h/bRM8LgB+UfEUEmDtpdBVfuc9bEvkd7w9HaMfbRdcthU0Ek2NOrVNpU1Eiu6U5Y8q1CsDJqD/yO1g==", + "version": "12.7.1", + "resolved": "https://registry.npmjs.org/dependency-cruiser/-/dependency-cruiser-12.7.1.tgz", + "integrity": "sha512-JBdqgpj/ydp9C1j8OBNM46EbQMyn9JIzORDLtFzPU7cVGeAZNnFqWX3pRyqBVjmUBX26cMIuXL/UdeI8pS9SfQ==", "dev": true, "dependencies": { "acorn": "8.8.2", @@ -2250,9 +2250,9 @@ } }, "node_modules/eslint": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz", - "integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", "dev": true, "dependencies": { "@eslint/eslintrc": "^1.4.1", @@ -5175,9 +5175,9 @@ } }, "node_modules/sonarqube-scanner": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sonarqube-scanner/-/sonarqube-scanner-3.0.0.tgz", - "integrity": "sha512-qJz06on6UZ00emVckmIj6BF7HdBh1xLwkMw44LkTw7IrjKkxqenPDPGAUdb1+OCGL2s6/ccmolxRI5UNTM2o/w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sonarqube-scanner/-/sonarqube-scanner-3.0.1.tgz", + "integrity": "sha512-u8HJITRe6E6HJWzerbSNAaH20rymSb8TJtnGd5H41jFxQm1hM+87+CqJaWDGzzkyufe2u8TdbTV4vb/4sFfqCA==", "dev": true, "dependencies": { "decompress": "^4.2.1", diff --git a/package.json b/package.json index ae1fb73..0b1781c 100644 --- a/package.json +++ b/package.json @@ -152,6 +152,11 @@ ], "description": "Schema to use" }, + "vscode-yaml-sort.sortArrays": { + "type": "boolean", + "default": false, + "description": "When `true`, will sort arrays" + }, "vscode-yaml-sort.sortOnSave": { "type": "number", "default": 0, @@ -247,18 +252,18 @@ }, "devDependencies": { "@types/mocha": "10.0.1", - "@types/node": "^18.11.19", + "@types/node": "^18.13.0", "@types/sinon": "^10.0.13", "@typescript-eslint/eslint-plugin": "^5.48.2", "@typescript-eslint/parser": "^5.48.2", "coveralls": "3.1.1", - "dependency-cruiser": "^12.5.0", - "eslint": "^8.32.0", + "dependency-cruiser": "^12.7.1", + "eslint": "^8.34.0", "jsdoc": "4.0.0", "mocha": "^10.2.0", "nyc": "15.1.0", "sinon": "^15.0.1", - "sonarqube-scanner": "^3.0.0", + "sonarqube-scanner": "^3.0.1", "ts-node": "10.9.1", "typescript": "^4.9.5", "typescript-require": "0.3.0" diff --git a/src/settings.ts b/src/settings.ts index 9b2b2f3..859ad39 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -48,6 +48,7 @@ export class Settings { notifySuccess = this.getBoolean("notifySuccess") quotingType = this.getQuotingType() schema = this.getSchema() + sortArrays = this.getBoolean("sortArrays") sortOnSave = this.getNumber("sortOnSave") useCustomSortRecursively = this.getBoolean("useCustomSortRecursively") useLeadingDashes = this.getBoolean("useLeadingDashes") diff --git a/src/util/yaml-util.ts b/src/util/yaml-util.ts index 8a0dc76..947b338 100644 --- a/src/util/yaml-util.ts +++ b/src/util/yaml-util.ts @@ -5,7 +5,7 @@ import { Severity, VsCodeAdapter } from "../adapter/vs-code-adapter" import { ProcessorController } from "../controller/processor-controller" import { ErrorUtil } from "./error-util" -const sortNestedArrays = (obj: unknown) => { +const sortArrays = (obj: unknown) => { if (!obj || typeof obj !== 'object') { return } else if (Array.isArray(obj)) { @@ -17,7 +17,7 @@ const sortNestedArrays = (obj: unknown) => { if (Array.isArray(object)) { Object.entries(object).sort() } - sortNestedArrays(object) + sortArrays(object) } }) } @@ -60,9 +60,12 @@ export class YamlUtil { // eslint-disable-next-line @typescript-eslint/no-explicit-any const doc = this.jsyamladapter.load(unsortedYamlWithoutTabs) as any - sortNestedArrays(doc) - let sortedYaml = "" + if (this.settings.sortArrays) { + sortArrays(doc) + } + + let sortedYaml = "" if (customSort > 0 && !this.settings.useCustomSortRecursively) { const keywords = this.settings.getCustomSortKeywords(customSort)