Skip to content
This repository was archived by the owner on Aug 7, 2023. It is now read-only.

Commit 8877bb6

Browse files
committed
Observe all settings
Getting the settings every single lint call is needlessly expensive. Observe the settings so we are fed the value at the start, and on every change.
1 parent 3ca2516 commit 8877bb6

File tree

1 file changed

+58
-10
lines changed

1 file changed

+58
-10
lines changed

lib/main.js

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,76 @@
11
'use babel';
22

3+
// eslint-disable-next-line import/extensions, import/no-extraneous-dependencies
4+
import { CompositeDisposable } from 'atom';
5+
36
let helpers = null;
47
let clangFlags = null;
58

69
export default {
710
activate() {
811
require('atom-package-deps').install('linter-clang');
12+
this.subscriptions = new CompositeDisposable();
13+
this.subscriptions.add(
14+
atom.config.observe('linter-clang.execPath', (value) => {
15+
this.execPath = value;
16+
}),
17+
);
18+
this.subscriptions.add(
19+
atom.config.observe('linter-clang.clangIncludePaths', (value) => {
20+
this.clangIncludePaths = value;
21+
}),
22+
);
23+
this.subscriptions.add(
24+
atom.config.observe('linter-clang.clangSuppressWarnings', (value) => {
25+
this.clangSuppressWarnings = value;
26+
}),
27+
);
28+
this.subscriptions.add(
29+
atom.config.observe('linter-clang.clangDefaultCFlags', (value) => {
30+
this.clangDefaultCFlags = value;
31+
}),
32+
);
33+
this.subscriptions.add(
34+
atom.config.observe('linter-clang.clangDefaultCppFlags', (value) => {
35+
this.clangDefaultCppFlags = value;
36+
}),
37+
);
38+
this.subscriptions.add(
39+
atom.config.observe('linter-clang.clangDefaultObjCFlags', (value) => {
40+
this.clangDefaultObjCFlags = value;
41+
}),
42+
);
43+
this.subscriptions.add(
44+
atom.config.observe('linter-clang.clangDefaultObjCppFlags', (value) => {
45+
this.clangDefaultObjCppFlags = value;
46+
}),
47+
);
48+
this.subscriptions.add(
49+
atom.config.observe('linter-clang.clangErrorLimit', (value) => {
50+
this.clangErrorLimit = value;
51+
}),
52+
);
53+
},
54+
55+
deactivate() {
56+
this.subscriptions.dispose();
957
},
1058

1159
provideLinter() {
1260
const regex = '(?<file>.+):(?<line>\\d+):(?<col>\\d+):({(?<lineStart>\\d+):(?<colStart>\\d+)-(?<lineEnd>\\d+):(?<colEnd>\\d+)}.*:)? (?<type>[\\w \\-]+): (?<message>.*)';
1361
return {
1462
name: 'clang',
15-
grammarScopes: ['source.c', 'source.cpp', 'source.objc', 'source.objcpp'],
1663
scope: 'file',
1764
lintOnFly: false,
65+
grammarScopes: ['source.c', 'source.cpp', 'source.objc', 'source.objcpp'],
1866
lint: (activeEditor) => {
1967
if (helpers === null) {
2068
helpers = require('atom-linter');
2169
}
2270
if (clangFlags === null) {
2371
clangFlags = require('clang-flags');
2472
}
25-
const command = atom.config.get('linter-clang.execPath');
73+
2674
const filePath = activeEditor.getPath();
2775
const args = [
2876
'-fsyntax-only',
@@ -36,30 +84,30 @@ export default {
3684

3785
if (/^C\+\+/.test(grammar)) {
3886
args.push('-xc++');
39-
args.push(...atom.config.get('linter-clang.clangDefaultCppFlags').split(/\s+/));
87+
args.push(...this.clangDefaultCppFlags.split(/\s+/));
4088
}
4189
if (grammar === 'Objective-C++') {
4290
args.push('-xobjective-c++');
43-
args.push(...atom.config.get('linter-clang.clangDefaultObjCppFlags').split(/\s+/));
91+
args.push(...this.clangDefaultObjCppFlags.split(/\s+/));
4492
}
4593
if (grammar === 'C') {
4694
args.push('-xc');
47-
args.push(...atom.config.get('linter-clang.clangDefaultCFlags').split(/\s+/));
95+
args.push(...this.clangDefaultCFlags.split(/\s+/));
4896
}
4997
if (grammar === 'Objective-C') {
5098
args.push('-xobjective-c');
51-
args.push(...atom.config.get('linter-clang.clangDefaultObjCFlags').split(/\s+/));
99+
args.push(...this.clangDefaultObjCFlags.split(/\s+/));
52100
}
53101

54-
args.push(`-ferror-limit=${atom.config.get('linter-clang.clangErrorLimit')}`);
55-
if (atom.config.get('linter-clang.clangSuppressWarnings')) {
102+
args.push(`-ferror-limit=${this.clangErrorLimit}`);
103+
if (this.clangSuppressWarnings) {
56104
args.push('-w');
57105
}
58106
if (atom.inDevMode()) {
59107
args.push('--verbose');
60108
}
61109

62-
atom.config.get('linter-clang.clangIncludePaths').forEach(path =>
110+
this.clangIncludePaths.forEach(path =>
63111
args.push(`-I${path}`),
64112
);
65113

@@ -81,7 +129,7 @@ export default {
81129
allowEmptyStderr: true,
82130
};
83131

84-
return helpers.exec(command, args, execOpts).then(output =>
132+
return helpers.exec(this.execPath, args, execOpts).then(output =>
85133
helpers.parse(output, regex),
86134
);
87135
},

0 commit comments

Comments
 (0)