Skip to content

Commit c55dce4

Browse files
committed
Include/exclude in config
1 parent d106247 commit c55dce4

File tree

4 files changed

+71
-15
lines changed

4 files changed

+71
-15
lines changed

example/webdoc.conf.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"source": {
3-
"includePattern": "./src/**/*"
3+
"include": "./src/**/*"
44
},
55
"plugins": [
66
"plugins/markdown"

packages/webdoc-cli/src/config.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@ type ConfigSchema = {
99
sort?: string
1010
},
1111
source?: {
12+
// Declared in order of priority
13+
include?: string | Array<string>,
1214
includePattern?: string | Array<string>,
13-
include?: string | Array<string>
15+
excludePattern?: string | Array<string>,
16+
exclude?: string | Array<string>,
1417
},
1518
conf?: {
1619
tags?: {
@@ -52,7 +55,6 @@ const defaultConfig: ConfigSchema = {
5255
sort: "type, scope, access, name", // @webdoc/parser{mod:sort}
5356
},
5457
source: {
55-
includePattern: "./**/*.js", // @webdoc/cli{main}
5658
},
5759
conf: {
5860
tags: {

packages/webdoc-cli/src/index.js

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,6 @@ async function main(argv: yargs.Argv) {
7979
global.Webdoc.env.conf = config;
8080
global.Webdoc.userConfig = config;
8181

82-
// TODO: excludePattern
83-
const includePattern = getIncludePattern(config);
84-
85-
if (!includePattern) {
86-
console.log("No source.include or source.includePattern found in config file");
87-
}
88-
8982
if (config.plugins) {
9083
for (const pluginPath of config.plugins) {
9184
if (pluginPath === "plugins/markdown") {

packages/webdoc-cli/src/sources/index.js

Lines changed: 66 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,76 @@ import type {RootDoc, SourceFile} from "@webdoc/types";
22
import globby from "globby";
33
import {packages} from "./packages";
44

5+
// Create a filtering callback that returns whether a path passes all
6+
// patterns (if exclude = false) or if it fails all of them (if exclude = true).
7+
function makePatternFilter(
8+
patterns: string | string[],
9+
exclude: boolean = false,
10+
): (path: string) => boolean {
11+
const normalizedFormat = Array.isArray(patterns) ?
12+
patterns :
13+
((patterns && [patterns]) || []);
14+
15+
if (normalizedFormat.length === 0) {
16+
// If no patterns to match, then short circuit evaluation.
17+
return () => true;
18+
}
19+
20+
const regExps = normalizedFormat.map(
21+
(pattern) => {
22+
try {
23+
return new RegExp(pattern, "g");
24+
} catch (e) {
25+
console.error("Invalid pattern: " + pattern +
26+
"\nPlease make sure the patterns in sources.includePattern or source.excludePattern " +
27+
"defined in your configuration file are valid\n",
28+
);
29+
}
30+
},
31+
);
32+
33+
return function(path: string): boolean {
34+
for (const regExp of regExps) {
35+
if (path.match(regExp)) {
36+
// If include pattern matched, return true.
37+
// If exclude pattern matched, return false.
38+
return !exclude;
39+
}
40+
}
41+
42+
// If all include patterns failed, return false.
43+
// If all exclude patterns passed, return true.
44+
return exclude;
45+
};
46+
}
47+
548
export function sources(config: Object, documentTree: RootDoc): SourceFile[] {
6-
const includePattern = config.source.includePattern || config.source.include;
49+
const {
50+
include,
51+
includePattern,
52+
exclude,
53+
excludePattern,
54+
} = config.source;
755

8-
if (!includePattern) {
9-
console.log("No source.include or source.includePattern found in config file");
56+
if (!include) {
57+
console.error("No input files specified. You must " +
58+
"define source.include in your configuration file.");
59+
60+
return [];
1061
}
1162

12-
const paths = globby.sync(includePattern);
13-
const sources: SourceFile[] = paths.map((file) => ({path: file}));
63+
const paths = globby.sync(include);
64+
const excludePaths = Array.isArray(exclude) ?
65+
exclude :
66+
((exclude && [exclude]) || []);
67+
68+
const sources: SourceFile[] = paths
69+
.filter(makePatternFilter(includePattern, false))
70+
.filter(makePatternFilter(excludePattern, true))
71+
.filter((path) => !(excludePaths.some(
72+
(excludedPath) => path === excludePaths,
73+
)))
74+
.map((path) => ({path}));
1475

1576
documentTree.packages = packages(sources);
1677

0 commit comments

Comments
 (0)