123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- import { FilePosition } from './input.js'
- /**
- * A position that is part of a range.
- */
- export interface RangePosition {
- /**
- * The line number in the input.
- */
- line: number
- /**
- * The column number in the input.
- */
- column: number
- }
- /**
- * The CSS parser throws this error for broken CSS.
- *
- * Custom parsers can throw this error for broken custom syntax using
- * the `Node#error` method.
- *
- * PostCSS will use the input source map to detect the original error location.
- * If you wrote a Sass file, compiled it to CSS and then parsed it with PostCSS,
- * PostCSS will show the original position in the Sass file.
- *
- * If you need the position in the PostCSS input
- * (e.g., to debug the previous compiler), use `error.input.file`.
- *
- * ```js
- * // Raising error from plugin
- * throw node.error('Unknown variable', { plugin: 'postcss-vars' })
- * ```
- *
- * ```js
- * // Catching and checking syntax error
- * try {
- * postcss.parse('a{')
- * } catch (error) {
- * if (error.name === 'CssSyntaxError') {
- * error //=> CssSyntaxError
- * }
- * }
- * ```
- */
- export default class CssSyntaxError {
- /**
- * Instantiates a CSS syntax error. Can be instantiated for a single position
- * or for a range.
- * @param message Error message.
- * @param lineOrStartPos If for a single position, the line number, or if for
- * a range, the inclusive start position of the error.
- * @param columnOrEndPos If for a single position, the column number, or if for
- * a range, the exclusive end position of the error.
- * @param source Source code of the broken file.
- * @param file Absolute path to the broken file.
- * @param plugin PostCSS plugin name, if error came from plugin.
- */
- constructor(
- message: string,
- lineOrStartPos?: number | RangePosition,
- columnOrEndPos?: number | RangePosition,
- source?: string,
- file?: string,
- plugin?: string
- )
- stack: string
- /**
- * Always equal to `'CssSyntaxError'`. You should always check error type
- * by `error.name === 'CssSyntaxError'`
- * instead of `error instanceof CssSyntaxError`,
- * because npm could have several PostCSS versions.
- *
- * ```js
- * if (error.name === 'CssSyntaxError') {
- * error //=> CssSyntaxError
- * }
- * ```
- */
- name: 'CssSyntaxError'
- /**
- * Error message.
- *
- * ```js
- * error.message //=> 'Unclosed block'
- * ```
- */
- reason: string
- /**
- * Full error text in the GNU error format
- * with plugin, file, line and column.
- *
- * ```js
- * error.message //=> 'a.css:1:1: Unclosed block'
- * ```
- */
- message: string
- /**
- * Absolute path to the broken file.
- *
- * ```js
- * error.file //=> 'a.sass'
- * error.input.file //=> 'a.css'
- * ```
- *
- * PostCSS will use the input source map to detect the original location.
- * If you need the position in the PostCSS input, use `error.input.file`.
- */
- file?: string
- /**
- * Source line of the error.
- *
- * ```js
- * error.line //=> 2
- * error.input.line //=> 4
- * ```
- *
- * PostCSS will use the input source map to detect the original location.
- * If you need the position in the PostCSS input, use `error.input.line`.
- */
- line?: number
- /**
- * Source column of the error.
- *
- * ```js
- * error.column //=> 1
- * error.input.column //=> 4
- * ```
- *
- * PostCSS will use the input source map to detect the original location.
- * If you need the position in the PostCSS input, use `error.input.column`.
- */
- column?: number
- /**
- * Source line of the error's end, exclusive. Provided if the error pertains
- * to a range.
- *
- * ```js
- * error.endLine //=> 3
- * error.input.endLine //=> 4
- * ```
- *
- * PostCSS will use the input source map to detect the original location.
- * If you need the position in the PostCSS input, use `error.input.endLine`.
- */
- endLine?: number
- /**
- * Source column of the error's end, exclusive. Provided if the error pertains
- * to a range.
- *
- * ```js
- * error.endColumn //=> 1
- * error.input.endColumn //=> 4
- * ```
- *
- * PostCSS will use the input source map to detect the original location.
- * If you need the position in the PostCSS input, use `error.input.endColumn`.
- */
- endColumn?: number
- /**
- * Source code of the broken file.
- *
- * ```js
- * error.source //=> 'a { b {} }'
- * error.input.source //=> 'a b { }'
- * ```
- */
- source?: string
- /**
- * Plugin name, if error came from plugin.
- *
- * ```js
- * error.plugin //=> 'postcss-vars'
- * ```
- */
- plugin?: string
- /**
- * Input object with PostCSS internal information
- * about input file. If input has source map
- * from previous tool, PostCSS will use origin
- * (for example, Sass) source. You can use this
- * object to get PostCSS input source.
- *
- * ```js
- * error.input.file //=> 'a.css'
- * error.file //=> 'a.sass'
- * ```
- */
- input?: FilePosition
- /**
- * Returns error position, message and source code of the broken part.
- *
- * ```js
- * error.toString() //=> "CssSyntaxError: app.css:1:1: Unclosed block
- * // > 1 | a {
- * // | ^"
- * ```
- *
- * @return Error position, message and source code.
- */
- toString(): string
- /**
- * Returns a few lines of CSS source that caused the error.
- *
- * If the CSS has an input source map without `sourceContent`,
- * this method will return an empty string.
- *
- * ```js
- * error.showSourceCode() //=> " 4 | }
- * // 5 | a {
- * // > 6 | bad
- * // | ^
- * // 7 | }
- * // 8 | b {"
- * ```
- *
- * @param color Whether arrow will be colored red by terminal
- * color codes. By default, PostCSS will detect
- * color support by `process.stdout.isTTY`
- * and `process.env.NODE_DISABLE_COLORS`.
- * @return Few lines of CSS source that caused the error.
- */
- showSourceCode(color?: boolean): string
- }
|