* Remove pinning of eslint-plugin-markdown An issue affecting Node.js source has been fixed in eslint-plugin-markdown so we don't need to pin it to beta-4 anymore. Refs: https://github.com/eslint/eslint-plugin-markdown/issues/69 * Update eslint-plugin-markdown up to 1.0.0-beta.7 * Fix docs for eslint-plugin-markdown@1.0.0-beta.7 PR-URL: https://github.com/nodejs/node/pull/14047 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Yuta Hiroto <hello@about-hiroppy.com> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
VFile is a virtual file format used by unified, a text processing umbrella (it powers retext for natural language, remark for markdown, and rehype for HTML). Each processors that parse, transform, and compile text, and need a virtual representation of files and a place to store messages about them. Plus, they work in the browser. VFile provides these requirements at a small size, in IE 9 and up.
VFile is different from the excellent vinyl in that it has a smaller API, a smaller size, and focuses on messages.
Installation
npm:
npm install vfile
Table of Contents
Usage
var vfile = require('vfile');
var file = vfile({path: '~/example.txt', contents: 'Alpha *braavo* charlie.'});
file.path; //=> '~/example.txt'
file.dirname; //=> '~'
file.extname = '.md';
file.basename; //=> 'example.md'
file.basename = 'index.text';
file.history; //=> ['~/example.txt', '~/example.md', '~/index.text']
file.message('`braavo` is misspelt; did you mean `bravo`?', {line: 1, column: 8});
console.log(file.messages);
Yields:
[ { [~/index.text:1:8: `braavo` is misspelt; did you mean `bravo`?]
message: '`braavo` is misspelt; did you mean `bravo`?',
name: '~/index.text:1:8',
file: '~/index.text',
reason: '`braavo` is misspelt; did you mean `bravo`?',
line: 1,
column: 8,
location: { start: [Object], end: [Object] },
ruleId: null,
source: null,
fatal: false } ]
Utilities
The following list of projects includes tools for working with virtual files. See Unist for projects working with nodes.
convert-vinyl-to-vfile— Convert from Vinylis-vfile-message— Check if a value is aVFileMessageobjectto-vfile— Create a virtual file from a file-path (and optionally read it)vfile-find-down— Find files by searching the file system downwardsvfile-find-up— Find files by searching the file system upwardsvfile-location— Convert between line/column- and range-based locationsvfile-statistics— Count messages per categoryvfile-messages-to-vscode-diagnostics— Convert to VS Code diagnosticsvfile-sort— Sort messages by line/columnvfile-to-eslint— Convert VFiles to ESLint formatter compatible output
Reporters
The following list of projects show linting results for given virtual files.
Reporters must accept Array.<VFile> as their first argument, and return
string. Reporters may accept other values too, in which case it’s suggested
to stick to vfile-reporters interface.
vfile-reporter— Stylish reportervfile-reporter-json— JSON reportervfile-reporter-pretty— Pretty reporter
API
VFile([options])
Create a new virtual file. If options is string or Buffer, treats
it as {contents: options}. If options is a VFile, returns it.
All other options are set on the newly created vfile.
Path related properties are set in the following order (least specific
to most specific): history, path, basename, stem, extname,
dirname.
It’s not possible to set either dirname or extname without setting
either history, path, basename, or stem as well.
Example
vfile();
vfile('console.log("alpha");');
vfile(Buffer.from('exit 1'));
vfile({path: path.join(__dirname, 'readme.md')});
vfile({stem: 'readme', extname: '.md', dirname: __dirname});
vfile({other: 'properties', are: 'copied', ov: {e: 'r'}});
vfile.contents
Buffer, string, null — Raw value.
vfile.cwd
string — Base of path. Defaults to process.cwd().
vfile.path
string? — Path of vfile. Cannot be nullified.
vfile.basename
string? — Current name (including extension) of vfile. Cannot
contain path separators. Cannot be nullified either (use
file.path = file.dirname instead).
vfile.stem
string? — Name (without extension) of vfile. Cannot be nullified,
and cannot contain path separators.
vfile.extname
string? — Extension (with dot) of vfile. Cannot be set if
there’s no path yet and cannot contain path separators.
vfile.dirname
string? — Path to parent directory of vfile. Cannot be set if
there’s no path yet.
vfile.history
Array.<string> — List of file-paths the file moved between.
vfile.messages
Array.<VFileMessage> — List of messages associated with the file.
vfile.data
Object — Place to store custom information. It’s OK to store custom
data directly on the vfile, moving it to data gives a little more
privacy.
VFile#toString([encoding])
Convert contents of vfile to string. If contents is a buffer,
encoding is used to stringify buffers (default: 'utf8').
VFile#message(reason[, position[, ruleId]])
Associates a message with the file for reason at position. When an
error is passed in as reason, copies the stack.
Parameters
reason(stringorError) — Reason for message, uses the stack and message of the error if givenposition(Node,Location, orPosition, optional) — Place at which the message occurred invfileruleId(string, optional) — Category of warning
Returns
VFile#fail(reason[, position[, ruleId]])
Associates a fatal message with the file, then immediately throws it.
Note: fatal errors mean a file is no longer processable.
Calls #message() internally.
Throws
VFileMessage
File-related message describing something at certain position (extends
Error).
Properties
file(string) — File-path (when the message was triggered)reason(string) — Reason for messageruleId(string?) — Category of messagesource(string?) — Namespace of warningstack(string?) — Stack of messagefatal(boolean?) — Iftrue, marks associated file as no longer processableline(number?) — Starting line of errorcolumn(number?) — Starting column of errorlocation(object) — Full range information, when available. Hasstartandendproperties, both set to an object withlineandcolumn, set tonumber?