markuplint
Advanced tools
Comparing version 4.0.0-dev.0 to 4.0.0-dev.10
@@ -5,3 +5,2 @@ import getStdin from 'get-stdin'; | ||
import { command } from './command.js'; | ||
import { createRule } from './create-rule/index.js'; | ||
import { initialize } from './init/index.js'; | ||
@@ -27,7 +26,4 @@ import { search } from './search/index.js'; | ||
if (cli.flags.createRule) { | ||
await createRule().catch(error => { | ||
process.stderr.write(error + '\n'); | ||
process.exit(1); | ||
}); | ||
process.exit(0); | ||
process.stderr.write("Use to run 'npx @markuplint/create-rule' instead of 'markuplint --create-rule'.\n"); | ||
process.exit(1); | ||
} | ||
@@ -34,0 +30,0 @@ const files = cli.input; |
@@ -1,12 +0,9 @@ | ||
import fs from 'node:fs'; | ||
import fs from 'node:fs/promises'; | ||
import module from 'node:module'; | ||
import path from 'node:path'; | ||
import util from 'node:util'; | ||
import { head, write, error } from '../../util.js'; | ||
import { confirm, confirmSequence, multiSelect } from '../prompt.js'; | ||
import { installModule, multiSelect, confirm, confirmSequence, header } from '@markuplint/cli-utils'; | ||
import { createConfig, langs } from './create-config.js'; | ||
import { getDefaultRules } from './get-default-rules.js'; | ||
import { installModule, selectModules } from './install-module.js'; | ||
import { selectModules } from './select-modules.js'; | ||
const require = module.createRequire(import.meta.url); | ||
const writeFile = util.promisify(fs.writeFile); | ||
const ruleCategories = { | ||
@@ -30,4 +27,5 @@ validation: { | ||
export async function initialize() { | ||
write(head('Initialization')); | ||
write.break(); | ||
process.stdout.write(header('Initialization')); | ||
process.stdout.write('\n'); | ||
process.stdout.write('\n'); | ||
const selectedLangs = await multiSelect({ | ||
@@ -63,19 +61,19 @@ message: 'Which do you use template engines?', | ||
const filePath = path.resolve(process.cwd(), '.markuplintrc'); | ||
await writeFile(filePath, JSON.stringify(config, null, 2), { encoding: 'utf8' }); | ||
write(`✨Created: ${filePath}`); | ||
await fs.writeFile(filePath, JSON.stringify(config, null, 2), { encoding: 'utf8' }); | ||
process.stdout.write(`✨Created: ${filePath}\n`); | ||
if (autoInstall) { | ||
write('Install automatically'); | ||
process.stdout.write('Install automatically\n'); | ||
const modules = selectModules(selectedLangs); | ||
const result = await installModule(modules, true).catch(error_ => new Error(error_)); | ||
if (result instanceof Error) { | ||
error.exit(); | ||
return; | ||
// eslint-disable-next-line unicorn/no-process-exit | ||
process.exit(1); | ||
} | ||
if (result.alreadyExists) { | ||
write('Modules are installed already.'); | ||
process.stdout.write('Modules are installed already.\n'); | ||
} | ||
else { | ||
write('✨ Success'); | ||
process.stdout.write('✨ Success\n'); | ||
} | ||
} | ||
} |
@@ -1,2 +0,2 @@ | ||
import { messageToString } from '../util.js'; | ||
import { messageToString } from '@markuplint/cli-utils'; | ||
export function githubReporter(results) { | ||
@@ -3,0 +3,0 @@ const out = []; |
@@ -1,5 +0,5 @@ | ||
import c from 'cli-color'; | ||
import { markuplint, messageToString, p, w } from '../util.js'; | ||
const loggerError = c.red; | ||
const loggerWarning = c.xterm(208); | ||
import { name, font, pad, getWidth, messageToString } from '@markuplint/cli-utils'; | ||
const commandName = name.toLowerCase(); | ||
const loggerError = font.red; | ||
const loggerWarning = font.xterm(208); | ||
export function simpleReporter(results, options) { | ||
@@ -15,17 +15,17 @@ const sizes = { | ||
const meg = messageToString(violation.message, violation.reason); | ||
sizes.meg = Math.max(sizes.meg, w(meg)); | ||
sizes.meg = Math.max(sizes.meg, getWidth(meg)); | ||
} | ||
const out = []; | ||
if (results.violations.length > 0) { | ||
out.push(`<${markuplint}> ${c.underline(results.filePath)}: ${loggerError('✗')}`); | ||
out.push(`<${commandName}> ${font.underline(results.filePath)}: ${loggerError('✗')}`); | ||
for (const violation of results.violations) { | ||
const s = violation.severity === 'error' ? loggerError('✖') : loggerWarning('⚠️'); | ||
const meg = messageToString(violation.message, violation.reason); | ||
out.push(` ${c.cyan(`${p(violation.line, sizes.line, true)}:${p(violation.col, sizes.col)}`)} ${s} ${p(meg, sizes.meg)} ${c.xterm(8)(violation.ruleId)} `); | ||
out.push(` ${font.cyan(`${pad(violation.line, sizes.line, true)}:${pad(violation.col, sizes.col)}`)} ${s} ${pad(meg, sizes.meg)} ${font.xterm(8)(violation.ruleId)} `); | ||
} | ||
} | ||
else if (!options.problemOnly) { | ||
out.push(`<${markuplint}> ${c.underline(results.filePath)}: ${c.green('✓')}`); | ||
out.push(`<${commandName}> ${font.underline(results.filePath)}: ${font.green('✓')}`); | ||
} | ||
return out; | ||
} |
@@ -1,5 +0,5 @@ | ||
import c from 'cli-color'; | ||
import { invisibleSpace, markuplint, messageToString, p, space, w } from '../util.js'; | ||
const loggerError = c.red; | ||
const loggerWarning = c.xterm(208); | ||
import { messageToString, font, name, invisibleSpace, space, pad, getWidth } from '@markuplint/cli-utils'; | ||
const commandName = name.toLowerCase(); | ||
const loggerError = font.red; | ||
const loggerWarning = font.xterm(208); | ||
export function standardReporter(results, options) { | ||
@@ -15,3 +15,3 @@ const sizes = { | ||
const meg = messageToString(violation.message, violation.reason); | ||
sizes.meg = Math.max(sizes.meg, w(meg)); | ||
sizes.meg = Math.max(sizes.meg, getWidth(meg)); | ||
} | ||
@@ -22,24 +22,39 @@ const out = []; | ||
for (const violation of results.violations) { | ||
const prev = lines[violation.line - 2] ?? ''; | ||
const line = lines[violation.line - 1] ?? ''; | ||
const next = lines[violation.line - 0] ?? ''; | ||
const before = line.slice(0, Math.max(0, violation.col - 1)); | ||
const after = line.slice(Math.max(0, violation.col - 1 + violation.raw.length)); | ||
const logger = violation.severity === 'error' ? loggerError : loggerWarning; | ||
const meg = messageToString(violation.message, violation.reason); | ||
out.push(`<${markuplint}> ${logger(`${violation.severity}: ${meg} (${violation.ruleId}) ${c.underline(`${results.filePath}:${violation.line}:${violation.col}`)}`)}`); | ||
if (violation.line - 1 > 0) { | ||
out.push(` ${c.cyan(p(violation.line - 1, sizes.col, true))}: ${space(prev)}`); | ||
const startLine = violation.line - 1; | ||
// Main message | ||
out.push(`<${commandName}> ${logger(`${violation.severity}: ${meg} (${violation.ruleId}) ${font.underline(`${results.filePath}:${violation.line}:${violation.col}`)}`)}`); | ||
// Previous line | ||
if (startLine > 0) { | ||
const prev = lines[startLine - 1] ?? ''; | ||
out.push(` ${font.cyan(pad(startLine, sizes.col, true))}: ${space(prev)}`); | ||
} | ||
out.push(` ${c.cyan(p(violation.line, sizes.col, true))}: ${space(before)}${c.bgRed(violation.raw)}${space(after)}`); | ||
if (!options.color) { | ||
out.push(` ${invisibleSpace(before)}${'^'.repeat(violation.raw.length)}${invisibleSpace(after)}`); | ||
// Current line | ||
const rawLines = violation.raw.split(/\r?\n/); | ||
const line = lines[startLine] ?? ''; | ||
for (const [i, rawLine] of rawLines.entries()) { | ||
const currentLine = lines[startLine + i] ?? ''; | ||
const beforeChars = i === 0 ? line.slice(0, Math.max(0, violation.col - 1)) : rawLine.match(/^\s+/)?.[0] ?? ''; | ||
const codeChars = rawLine.trim(); | ||
const afterChars = currentLine.slice(Math.max(0, beforeChars.length + codeChars.length)); | ||
const lineNoChars = pad(violation.line + i, sizes.col, true); | ||
const lineNo = font.cyan(lineNoChars); | ||
const before = i === 0 ? space(beforeChars) : font.bgRed(space(beforeChars)); | ||
const code = font.bgRed(codeChars); | ||
const after = space(afterChars); | ||
out.push(` ${lineNo}: ${before}${code}${space(after)}`); | ||
if (!options.color) { | ||
out.push(` ${invisibleSpace(lineNoChars + ': ' + beforeChars)}${'^'.repeat(codeChars.length)}${invisibleSpace(afterChars)}`); | ||
} | ||
} | ||
out.push(` ${c.cyan(p(violation.line + 1, sizes.col, true))}: ${space(next)}`); | ||
// Next line | ||
const next = lines[startLine + rawLines.length] ?? ''; | ||
out.push(` ${font.cyan(pad(startLine + rawLines.length + 1, sizes.col, true))}: ${space(next)}`); | ||
} | ||
} | ||
else if (!options.problemOnly) { | ||
out.push(`<${markuplint}> ${c.green('passed')} ${c.underline(results.filePath)}`); | ||
out.push(`<${commandName}> ${font.green('passed')} ${font.underline(results.filePath)}`); | ||
} | ||
return out; | ||
} |
{ | ||
"name": "markuplint", | ||
"version": "4.0.0-dev.0+7c596917", | ||
"version": "4.0.0-dev.10+b28398ab", | ||
"description": "An HTML linter for all markup developers", | ||
@@ -28,25 +28,18 @@ "author": "Yusuke Hirao", | ||
"dependencies": { | ||
"@markuplint/create-rule-helper": "4.0.0-dev.0+7c596917", | ||
"@markuplint/file-resolver": "4.0.0-dev.0+7c596917", | ||
"@markuplint/html-parser": "4.0.0-dev.0+7c596917", | ||
"@markuplint/html-spec": "4.0.0-dev.0+7c596917", | ||
"@markuplint/i18n": "4.0.0-dev.0+7c596917", | ||
"@markuplint/ml-ast": "4.0.0-dev.0+7c596917", | ||
"@markuplint/ml-config": "4.0.0-dev.0+7c596917", | ||
"@markuplint/ml-core": "4.0.0-dev.0+7c596917", | ||
"@markuplint/ml-spec": "4.0.0-dev.0+7c596917", | ||
"@markuplint/rules": "4.0.0-dev.0+7c596917", | ||
"@markuplint/shared": "4.0.0-dev.0+7c596917", | ||
"@types/cli-color": "^2.0.6", | ||
"@markuplint/cli-utils": "4.0.0-dev.3823+b28398ab", | ||
"@markuplint/file-resolver": "4.0.0-dev.10+b28398ab", | ||
"@markuplint/html-parser": "4.0.0-dev.10+b28398ab", | ||
"@markuplint/html-spec": "4.0.0-dev.10+b28398ab", | ||
"@markuplint/i18n": "4.0.0-dev.10+b28398ab", | ||
"@markuplint/ml-ast": "4.0.0-dev.10+b28398ab", | ||
"@markuplint/ml-config": "4.0.0-dev.10+b28398ab", | ||
"@markuplint/ml-core": "4.0.0-dev.10+b28398ab", | ||
"@markuplint/ml-spec": "4.0.0-dev.10+b28398ab", | ||
"@markuplint/rules": "4.0.0-dev.10+b28398ab", | ||
"@markuplint/shared": "4.0.0-dev.10+b28398ab", | ||
"@types/debug": "^4.1.12", | ||
"@types/uuid": "^9.0.7", | ||
"chokidar": "^3.5.3", | ||
"cli-color": "^2.0.3", | ||
"debug": "^4.3.4", | ||
"detect-installed": "^2.0.4", | ||
"eastasianwidth": "^0.2.0", | ||
"enquirer": "^2.4.1", | ||
"get-stdin": "^9.0.0", | ||
"gray-matter": "^4.0.3", | ||
"has-yarn": "^3.0.0", | ||
"meow": "^12.1.1", | ||
@@ -57,6 +50,5 @@ "node-fetch": "^3.3.2", | ||
"strip-ansi": "^7.1.0", | ||
"type-fest": "^4.8.2", | ||
"uuid": "^9.0.1" | ||
"type-fest": "^4.8.3" | ||
}, | ||
"gitHead": "7c59691701465a0fb3a4b69187318e8033c463d4" | ||
"gitHead": "b28398ab9c8f0ad790f2915ad5da8f3a80e9b8d6" | ||
} |
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
78460
22
68
1846
+ Addedtype-fest@4.33.0(transitive)
- Removed@markuplint/create-rule-helper@4.0.0-dev.0+7c596917
- Removed@types/cli-color@^2.0.6
- Removed@types/uuid@^9.0.7
- Removedcli-color@^2.0.3
- Removeddetect-installed@^2.0.4
- Removedeastasianwidth@^0.2.0
- Removedenquirer@^2.4.1
- Removedhas-yarn@^3.0.0
- Removeduuid@^9.0.1
- Removed@types/cli-color@2.0.6(transitive)
- Removed@types/uuid@9.0.8(transitive)
- Removedansi-colors@4.1.3(transitive)
- Removedansi-regex@5.0.1(transitive)
- Removedcli-color@2.0.4(transitive)
- Removedd@1.0.2(transitive)
- Removeddetect-installed@2.0.4(transitive)
- Removedeastasianwidth@0.2.0(transitive)
- Removedenquirer@2.4.1(transitive)
- Removedes5-ext@0.10.64(transitive)
- Removedes6-iterator@2.0.3(transitive)
- Removedes6-symbol@3.1.4(transitive)
- Removedes6-weak-map@2.0.3(transitive)
- Removedesniff@2.0.1(transitive)
- Removedevent-emitter@0.3.5(transitive)
- Removedexpand-tilde@2.0.2(transitive)
- Removedext@1.7.0(transitive)
- Removedget-installed-path@2.1.1(transitive)
- Removedglobal-modules@1.0.0(transitive)
- Removedglobal-prefix@1.0.2(transitive)
- Removedhas-yarn@3.0.0(transitive)
- Removedhomedir-polyfill@1.0.3(transitive)
- Removedini@1.3.8(transitive)
- Removedis-promise@2.2.2(transitive)
- Removedis-windows@1.0.2(transitive)
- Removedisexe@2.0.0(transitive)
- Removedlru-queue@0.1.0(transitive)
- Removedmemoizee@0.4.17(transitive)
- Removednext-tick@1.1.0(transitive)
- Removedparse-passwd@1.0.0(transitive)
- Removedresolve-dir@1.0.1(transitive)
- Removedstrip-ansi@6.0.1(transitive)
- Removedtimers-ext@0.1.8(transitive)
- Removedtype@2.7.3(transitive)
- Removedtype-fest@4.34.1(transitive)
- Removeduuid@9.0.1(transitive)
- Removedwhich@1.3.1(transitive)
Updatedtype-fest@^4.8.3