| import { assertString, isString } from './validateTypes.mjs'; |
| import { isComment } from './typeGuards.mjs'; |
| |
| export const DISABLE_COMMAND = '-disable'; |
| export const DISABLE_LINE_COMMAND = '-disable-line'; |
| export const DISABLE_NEXT_LINE_COMMAND = '-disable-next-line'; |
| export const ENABLE_COMMAND = '-enable'; |
| |
| const ALL_COMMANDS = new Set([ |
| DISABLE_COMMAND, |
| DISABLE_LINE_COMMAND, |
| DISABLE_NEXT_LINE_COMMAND, |
| ENABLE_COMMAND, |
| ]); |
| |
| export const DEFAULT_CONFIGURATION_COMMENT = 'stylelint'; |
| |
| /** |
| * Extract a command from a given comment. |
| * |
| * @param {string} commentText |
| * @param {string} [configurationComment] |
| * @returns {string} |
| */ |
| export function extractConfigurationComment( |
| commentText, |
| configurationComment = DEFAULT_CONFIGURATION_COMMENT, |
| ) { |
| if (!commentText) return commentText; |
| |
| const [command] = commentText.split(/\s/, 1); |
| |
| assertString(command); |
| |
| return command.replace(configurationComment, ''); |
| } |
| |
| /** |
| * Tests if the given comment is a Stylelint command. |
| * |
| * @param {string | import('postcss').Node} textOrNode |
| * @param {string} [configurationComment] |
| * @returns {boolean} |
| */ |
| export function isConfigurationComment( |
| textOrNode, |
| configurationComment = DEFAULT_CONFIGURATION_COMMENT, |
| ) { |
| const commentText = isString(textOrNode) |
| ? textOrNode |
| : isComment(textOrNode) |
| ? textOrNode.text |
| : undefined; |
| |
| if (!commentText) return false; |
| |
| const command = extractConfigurationComment(commentText, configurationComment); |
| |
| return command !== undefined && ALL_COMMANDS.has(command); |
| } |
| |
| /** |
| * Get full stylelint command |
| * |
| * @param {string} command |
| * @param {string} [configurationComment] |
| * @returns {string} |
| */ |
| export function getConfigurationComment( |
| command, |
| configurationComment = DEFAULT_CONFIGURATION_COMMENT, |
| ) { |
| return `${configurationComment}${command}`; |
| } |