.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / fast-glob / node_modules / micromatch / lib / compilers.js
1 'use strict';
2
3 var nanomatch = require('nanomatch');
4 var extglob = require('extglob');
5
6 module.exports = function(snapdragon) {
7   var compilers = snapdragon.compiler.compilers;
8   var opts = snapdragon.options;
9
10   // register nanomatch compilers
11   snapdragon.use(nanomatch.compilers);
12
13   // get references to some specific nanomatch compilers before they
14   // are overridden by the extglob and/or custom compilers
15   var escape = compilers.escape;
16   var qmark = compilers.qmark;
17   var slash = compilers.slash;
18   var star = compilers.star;
19   var text = compilers.text;
20   var plus = compilers.plus;
21   var dot = compilers.dot;
22
23   // register extglob compilers or escape exglobs if disabled
24   if (opts.extglob === false || opts.noext === true) {
25     snapdragon.compiler.use(escapeExtglobs);
26   } else {
27     snapdragon.use(extglob.compilers);
28   }
29
30   snapdragon.use(function() {
31     this.options.star = this.options.star || function(/*node*/) {
32       return '[^\\\\/]*?';
33     };
34   });
35
36   // custom micromatch compilers
37   snapdragon.compiler
38
39     // reset referenced compiler
40     .set('dot', dot)
41     .set('escape', escape)
42     .set('plus', plus)
43     .set('slash', slash)
44     .set('qmark', qmark)
45     .set('star', star)
46     .set('text', text);
47 };
48
49 function escapeExtglobs(compiler) {
50   compiler.set('paren', function(node) {
51     var val = '';
52     visit(node, function(tok) {
53       if (tok.val) val += (/^\W/.test(tok.val) ? '\\' : '') + tok.val;
54     });
55     return this.emit(val, node);
56   });
57
58   /**
59    * Visit `node` with the given `fn`
60    */
61
62   function visit(node, fn) {
63     return node.nodes ? mapVisit(node.nodes, fn) : fn(node);
64   }
65
66   /**
67    * Map visit over array of `nodes`.
68    */
69
70   function mapVisit(nodes, fn) {
71     var len = nodes.length;
72     var idx = -1;
73     while (++idx < len) {
74       visit(nodes[idx], fn);
75     }
76   }
77 }