Skip to content

Commit 218a680

Browse files
committed
Refactor code-style
1 parent 5f7be83 commit 218a680

File tree

5 files changed

+273
-288
lines changed

5 files changed

+273
-288
lines changed

index.js

Lines changed: 63 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,89 @@
1-
'use strict';
1+
'use strict'
22

3-
var Map = require('es6-map'),
4-
is = require('unist-util-is');
3+
var Map = require('es6-map')
4+
var visit = require('unist-util-visit')
55

6+
module.exports = Index
67

7-
var IndexPrototype = {
8-
get: function (key) {
9-
return this.index.get(key) || [];
10-
},
8+
Index.prototype.get = get
9+
Index.prototype.add = add
10+
Index.prototype.remove = remove
1111

12-
add: function (node) {
13-
var key = this.keyfn(node);
12+
function Index(tree, filter, prop) {
13+
var key
14+
var self
1415

15-
if (!this.index.has(key)) {
16-
this.index.set(key, []);
17-
}
18-
19-
var nodes = this.index.get(key);
16+
if (!(this instanceof Index)) {
17+
return new Index(tree, filter, prop)
18+
}
2019

21-
if (nodes.indexOf(node) < 0) {
22-
nodes.push(node);
20+
if (prop === null || prop === undefined) {
21+
if (filter === null || filter === undefined) {
22+
prop = tree
23+
tree = null
24+
} else {
25+
prop = filter
2326
}
2427

25-
return this;
26-
},
28+
filter = trueConst
29+
}
2730

28-
remove: function (node) {
29-
var key = this.keyfn(node);
30-
var nodes = this.index.get(key);
31-
var nodeIndex;
31+
self = this
32+
key = typeof prop === 'string' ? pluck : prop
3233

33-
if (nodes && (nodeIndex = nodes.indexOf(node)) >= 0) {
34-
nodes.splice(nodeIndex, 1);
35-
}
34+
this.index = new Map()
35+
this.keyfn = key
3636

37-
return this;
37+
if (tree) {
38+
visit(tree, filter, add)
3839
}
39-
};
4040

41+
return this
4142

42-
module.exports = function Index (ast, filter, keyfn) {
43-
if (arguments.length == 1) {
44-
return Index(null, trueConst, arguments[0]);
43+
function pluck(node) {
44+
return node[prop]
4545
}
46-
if (arguments.length == 2) {
47-
return Index(arguments[0], trueConst, arguments[1]);
46+
47+
function add(node) {
48+
self.add(node)
4849
}
49-
if (typeof keyfn == 'string') {
50-
keyfn = (function (prop) {
51-
return function (node) { return node[prop] };
52-
}(keyfn));
50+
}
51+
52+
function get(key) {
53+
return this.index.get(key) || []
54+
}
55+
56+
function add(node) {
57+
var self = this
58+
var key = self.keyfn(node)
59+
var nodes
60+
61+
if (!self.index.has(key)) {
62+
self.index.set(key, [])
5363
}
5464

55-
var index = Object.create(IndexPrototype, {
56-
index: {
57-
value: new Map
58-
},
59-
keyfn: {
60-
value: keyfn
61-
}
62-
});
65+
nodes = self.index.get(key)
6366

64-
if (!ast) {
65-
return index;
67+
if (nodes.indexOf(node) === -1) {
68+
nodes.push(node)
6669
}
6770

68-
// Initialize in preorder traversal.
69-
(function preorder (node, nodeIndex, parent) {
70-
if (is(filter, node, nodeIndex, parent)) {
71-
index.add(node);
72-
}
71+
return self
72+
}
7373

74-
node.children && node.children.forEach(function (child, childIndex) {
75-
preorder(child, childIndex, node);
76-
});
77-
}(ast, null, null));
74+
function remove(node) {
75+
var self = this
76+
var key = self.keyfn(node)
77+
var nodes = self.index.get(key)
78+
var pos = nodes ? nodes.indexOf(node) : -1
7879

79-
return index;
80-
};
80+
if (pos !== -1) {
81+
nodes.splice(pos, 1)
82+
}
8183

84+
return self
85+
}
8286

83-
function trueConst () {
84-
return true;
87+
function trueConst() {
88+
return true
8589
}

package.json

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,29 @@
3232
],
3333
"dependencies": {
3434
"es6-map": "^0.1.3",
35-
"unist-util-is": "^2.0.0"
35+
"unist-util-visit": "^1.4.0"
3636
},
3737
"devDependencies": {
38+
"prettier": "^1.14.2",
3839
"tape": "^4.4.0",
3940
"unist-builder": "^1.0.1",
40-
"unist-util-select": "^1.5.0"
41+
"unist-util-select": "^1.5.0",
42+
"xo": "^0.22.0"
4143
},
4244
"scripts": {
45+
"format": "prettier --write \"**/*.js\" && xo --fix",
4346
"test": "tape test/*.js"
47+
},
48+
"prettier": {
49+
"tabWidth": 2,
50+
"useTabs": false,
51+
"singleQuote": true,
52+
"bracketSpacing": false,
53+
"semi": false,
54+
"trailingComma": "none"
55+
},
56+
"xo": {
57+
"prettier": true,
58+
"esnext": false
4459
}
4560
}

test/add.js

Lines changed: 31 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,31 @@
1-
'use strict';
2-
3-
var Index = require('..');
4-
5-
var test = require('tape'),
6-
u = require('unist-builder'),
7-
select = require('unist-util-select');
8-
9-
10-
test('index.add', function (t) {
11-
var ast = u('root', [
12-
u('node', { word: 'foo' }),
13-
u('node', { word: 'bar' })
14-
]);
15-
var extraNode = u('node', { word: 'foo' });
16-
var $ = select.one(ast);
17-
18-
var index = Index(ast, 'word');
19-
t.deepEqual(index.get('foo'), [
20-
$('[word=foo]')
21-
]);
22-
23-
var result = index.add(extraNode);
24-
t.deepEqual(index.get('foo'), [
25-
$('[word=foo]'),
26-
extraNode
27-
]);
28-
29-
t.equal(result, index, 'returns this');
30-
31-
index.add($('[word=foo]'));
32-
t.deepEqual(index.get('foo'), [
33-
$('[word=foo]'),
34-
extraNode
35-
]);
36-
37-
index.add(extraNode);
38-
t.deepEqual(index.get('foo'), [
39-
$('[word=foo]'),
40-
extraNode
41-
]);
42-
43-
t.end();
44-
});
1+
'use strict'
2+
3+
var Index = require('..')
4+
5+
var test = require('tape')
6+
7+
var u = require('unist-builder')
8+
9+
var select = require('unist-util-select')
10+
11+
test('index.add', function(t) {
12+
var ast = u('root', [u('node', {word: 'foo'}), u('node', {word: 'bar'})])
13+
var extraNode = u('node', {word: 'foo'})
14+
var $ = select.one(ast)
15+
16+
var index = new Index(ast, 'word')
17+
t.deepEqual(index.get('foo'), [$('[word=foo]')])
18+
19+
var result = index.add(extraNode)
20+
t.deepEqual(index.get('foo'), [$('[word=foo]'), extraNode])
21+
22+
t.equal(result, index, 'returns this')
23+
24+
index.add($('[word=foo]'))
25+
t.deepEqual(index.get('foo'), [$('[word=foo]'), extraNode])
26+
27+
index.add(extraNode)
28+
t.deepEqual(index.get('foo'), [$('[word=foo]'), extraNode])
29+
30+
t.end()
31+
})

0 commit comments

Comments
 (0)