mirror of
https://github.com/jimeh/dotfiles.git
synced 2026-02-19 06:26:39 +00:00
fix(node/prettier): dirty hack to allow prettier to find plugins installed with volta
Volta installs all global packages into their own separate sandbox, with no other packages installed in the same node_modules directory. This hack abuses the fact that prettier can be configured with a *.js file, and effectively scans the volta installation directory for sandboxes for prettier plugins, and sets anything it finds as the "pluginSearchDirs" list.
This commit is contained in:
@@ -28,6 +28,7 @@ SYMLINKS=(
|
||||
irbrc
|
||||
peco
|
||||
powconfig
|
||||
prettierrc.js
|
||||
pryrc
|
||||
reek.yml
|
||||
rspec
|
||||
|
||||
50
prettierrc.js
Normal file
50
prettierrc.js
Normal file
@@ -0,0 +1,50 @@
|
||||
const homedir = require('os').homedir();
|
||||
const fs = require("fs");
|
||||
|
||||
function voltaPrettierSearchDirs(voltaDir) {
|
||||
const packagesDir = `${voltaDir}/tools/image/packages`;
|
||||
|
||||
let paths = []
|
||||
let parents = [];
|
||||
|
||||
fs.readdirSync(packagesDir).forEach((item) => {
|
||||
if (/^prettier-plugin-[^/]+$/.test(item)) {
|
||||
paths.push(`${packagesDir}/${item}/lib`);
|
||||
}
|
||||
|
||||
if (item == '@prettier') {
|
||||
paths = paths.concat(
|
||||
findDirs(`${packagesDir}/@prettier`, /^plugin-[^/]+$/, "lib")
|
||||
);
|
||||
} else if (/^@[^/]+$/.test(item)) {
|
||||
parents.push(`${packagesDir}/${item}`);
|
||||
}
|
||||
|
||||
return [];
|
||||
})
|
||||
|
||||
parents.forEach((parent) => {
|
||||
paths = paths.concat(findDirs(parent, /^prettier-plugin-[^/]+$/, "lib"));
|
||||
})
|
||||
|
||||
return paths;
|
||||
}
|
||||
|
||||
function findDirs(parent, pattern, suffix) {
|
||||
return fs.readdirSync(parent).flatMap((item) => {
|
||||
const fp = `${parent}/${item}`;
|
||||
if (pattern.test(item) && fs.statSync(fp).isDirectory()) {
|
||||
if (suffix) {
|
||||
return `${fp}/${suffix}`;
|
||||
}
|
||||
return fp;
|
||||
}
|
||||
|
||||
return [];
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
pluginSearchDirs: voltaPrettierSearchDirs(`${homedir}/.volta`),
|
||||
};
|
||||
Reference in New Issue
Block a user