eslint-plugin-tailwindcss
Advanced tools
Comparing version
@@ -6,4 +6,5 @@ 'use strict'; | ||
const postcss = require('postcss'); | ||
const removeDuplicatesFromArray = require('./removeDuplicatesFromArray'); | ||
let previousGlobsResults = []; | ||
const cssFilesInfos = new Map(); | ||
let lastUpdate = null; | ||
@@ -28,17 +29,25 @@ let classnamesFromFiles = []; | ||
// console.log('generateClassnamesListSync EXPIRED'); | ||
const files = fg.sync(patterns, { suppressErrors: true, stats: true }); | ||
const hasNewFiles = previousGlobsResults.flat().join(',') != files.flat().join(','); | ||
if (!hasNewFiles) { | ||
// No new files from glob patterns | ||
return classnamesFromFiles; | ||
} | ||
// Update classnames from CSS files | ||
previousGlobsResults = files; | ||
lastUpdate = now; | ||
let detectedClassnames = new Set(); | ||
const filesToBeRemoved = new Set([...cssFilesInfos.keys()]); | ||
const files = fg.sync(patterns, { suppressErrors: true, stats: true }); | ||
for (const file of files) { | ||
let mtime = ''; | ||
let canBeSkipped = cssFilesInfos.has(file.path); | ||
if (canBeSkipped) { | ||
// This file is still used | ||
filesToBeRemoved.delete(file.path); | ||
// Check modification date | ||
const stats = fs.statSync(file.path); | ||
mtime = `${stats.mtime || ''}`; | ||
canBeSkipped = cssFilesInfos.get(file.path).mtime === mtime; | ||
} | ||
if (canBeSkipped) { | ||
// File did not change since last run | ||
continue; | ||
} | ||
// Parse CSS file | ||
const data = fs.readFileSync(file.path, 'utf-8'); | ||
const root = postcss.parse(data); | ||
let detectedClassnames = new Set(); | ||
root.walkRules((rule) => { | ||
@@ -50,7 +59,22 @@ const regexp = /\.([^\.\,\s\n\:\(\)\[\]\'~\+\>\*\\]*)/gim; | ||
}); | ||
// Save the detected classnames | ||
cssFilesInfos.set(file.path, { | ||
mtime: mtime, | ||
classNames: [...detectedClassnames], | ||
}); | ||
} | ||
classnamesFromFiles = [...detectedClassnames]; | ||
return classnamesFromFiles; | ||
// Remove erased CSS from the Map | ||
const deletedFiles = [...filesToBeRemoved]; | ||
for (let i = 0; i < deletedFiles.length; i++) { | ||
cssFilesInfos.delete(deletedFiles[i]); | ||
} | ||
// Build the final list | ||
classnamesFromFiles = []; | ||
cssFilesInfos.forEach((css) => { | ||
classnamesFromFiles = [...classnamesFromFiles, ...css.classNames]; | ||
}); | ||
// Unique classnames | ||
return removeDuplicatesFromArray(classnamesFromFiles); | ||
}; | ||
module.exports = generateClassnamesListSync; |
@@ -47,8 +47,9 @@ 'use strict'; | ||
const stats = fs.statSync(resolvedPath); | ||
const mtime = `${stats.mtime || ''}`; | ||
if (stats === null) { | ||
// Default to no config | ||
loadedConfig = {}; | ||
} else if (lastModifiedDate !== stats.mtime) { | ||
} else if (lastModifiedDate !== mtime) { | ||
// Load the config based on path | ||
lastModifiedDate = stats.mtime; | ||
lastModifiedDate = mtime; | ||
loadedConfig = requireUncached(resolvedPath); | ||
@@ -55,0 +56,0 @@ } else { |
{ | ||
"name": "eslint-plugin-tailwindcss", | ||
"version": "3.17.3-beta.0", | ||
"version": "3.17.3-beta.2", | ||
"description": "Rules enforcing best practices while using Tailwind CSS", | ||
@@ -56,2 +56,2 @@ "keywords": [ | ||
"license": "MIT" | ||
} | ||
} |
216959
0.42%5530
0.49%