UNPKG

tolkfmt-test-dev

Version:

Code formatter for the Tolk programming language

73 lines 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ImportCategory = void 0; exports.extractImportPath = extractImportPath; exports.categorizeImport = categorizeImport; exports.getImportSubcategory = getImportSubcategory; exports.sortImports = sortImports; var ImportCategory; (function (ImportCategory) { ImportCategory[ImportCategory["stdlib"] = 0] = "stdlib"; ImportCategory[ImportCategory["relativeCurrent"] = 1] = "relativeCurrent"; ImportCategory[ImportCategory["relativeNested"] = 2] = "relativeNested"; ImportCategory[ImportCategory["relativeParent"] = 3] = "relativeParent"; ImportCategory[ImportCategory["absolute"] = 4] = "absolute"; })(ImportCategory || (exports.ImportCategory = ImportCategory = {})); function extractImportPath(node) { const pathN = node.childForFieldName("path"); if (!pathN) return ""; // cannot happen return pathN.text.slice(1, -1).replace(/\\/g, "/"); } function categorizeImport(path) { if (path.startsWith("@stdlib/")) { return ImportCategory.stdlib; } if (path.startsWith("./")) { return ImportCategory.relativeCurrent; } if (path.startsWith("../")) { return ImportCategory.relativeParent; } if (path.startsWith("/")) { return ImportCategory.absolute; } if (path.includes("/")) { return ImportCategory.relativeNested; } return ImportCategory.relativeCurrent; } function getImportSubcategory(path, category) { switch (category) { case ImportCategory.stdlib: { return 0; } case ImportCategory.relativeCurrent: { return 0; } case ImportCategory.relativeParent: { return (path.match(/\.\.\//g) ?? []).length; } case ImportCategory.relativeNested: { return (path.match(/\//g) ?? []).length; } case ImportCategory.absolute: { return 0; } default: { return 0; } } } function sortImports(imports) { return imports.sort((a, b) => { if (a.category !== b.category) { return a.category - b.category; } if (a.subcategory !== b.subcategory) { return a.subcategory - b.subcategory; } return a.path.localeCompare(b.path); }); } //# sourceMappingURL=imports.js.map