CSScomb Core is a framework for writing postprocessors.
It provides you with a nice set of features:
- Parser with support of preprocessors
- API to create and use options
- API to process files and directories
var Comb = require('csscomb-core');
// Constructor accepts a list of options to use and list of acceptable syntaxes.
var comb = new Comb(options, 'css');
For a simple example of usage take a look
at a template project.
Feel free to fork it and modify.
There are a number of methods that become available once you create an instance.
Use a plugin.
- Params: {Object} Option's plugin
- Return: {CombCore} Instance's object
Load configuration from JSON.
Activate and configure needed options.
- Params: {Object} Config
- Return: {CombCore} Instance's object
Get list of available options in exact order they will be processed.
Can be used for testing purpose.
- Return: {Array} List of options' names
Get option's value.
Can be used inside plugin's process
method.
- Params: {String} Option's name
- Return: Value set by user for this option
Get name of syntax that is currently being used.
Can be used inside plugin's process
method.
- Return: {String} Syntax name
Lint a file or a directory.
- Params: {String} Path to file or directory
- Return: {Promise}
Lint all files in a directory.
- Params: {String} Path to file or directory
- Return: {Promise}
Lint a single file.
- Params: {String} Path to file
- Return: {Promise}
Lint a string.
- Params:
{String} Code to process
{{context: String, filename: String, syntax: String}} Options (optional) where context is Gonzales PE rule, filename is a file's name that is used to display errors and syntax is syntax name withcss
being a default value. - Return: {Promise} Resolves with list of found errors.
Process a file or a directory.
- Params: {String} Path to file or directory
- Return: {Promise}
Process all files in a directory.
- Params: {String} Path to directory
- Return: {Promise}
Process a single file.
- Params: {String} Path to file
- Return: {Promise}
Process a string.
- Params:
{String} Code to process
{{context: String, filename: String, syntax: String}} Options (optional) where context is Gonzales PE rule, filename is a file's name that is used to display errors and syntax is syntax name withcss
being a default value. - Return: {Promise} Resolves with processed string.
A plugin is a JavaScript object that has methods to set value and process AST
nodes.
Take a look at Flip Comb for an example.
There are some fields you should take care of.
Option's name as it should be used in config.
- Required: yes
- Acceptable value: {String}
- Example:
"flip-comments"
List of syntaxes the option supports.
This depends on parser possibilities.
Currently the following work fine: css
, less
, sass
and scss
.
- Required: yes
- Acceptable value: {Array}
- Example:
['css']
In order to tell CSScomb Core which values are acceptable, plugin should have
either accepts
or setValue
field.
accepts
should be used to provide patterns, while setValue
is good for
modifying value before using it.
You can use one or several of the following:
– boolean: [true]
– boolean: [false]
– boolean: [true, false]
– string: /regexp/
– number: true
- Required: no, but if this field is missed,
setValue
must be set - Acceptable value: {Object}
- Example:
{ boolean: [true] }
Function to modify option's value before using it.
This field overrides accepts
field if it's set in the plugin too.
- Required: no, but if this field is missed,
accepts
must be set - Acceptable value: {Function}
- Example:
function(value) { return value * 4; }
Run the plugin before another option.
- Required: no
- Acceptable value: {String} Another option's name
- Example:
"block-indent"
Modify AST nodes.
- Required: yes
- Acceptable value: {Function}
- Example:
function(nodeType, nodeContent) { if (nodeType === 'commentML') node[0] = ' (╯°□°)╯︵ ┻━┻ '; }