Skip to content

Commit

Permalink
use clang-tidy command with task to generate items in problem's view.
Browse files Browse the repository at this point in the history
Signed-off-by: Jacques Bouthillier <[email protected]>
  • Loading branch information
lmcbout committed Jun 20, 2019
1 parent cce30fa commit a1c780c
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 2 deletions.
26 changes: 24 additions & 2 deletions packages/cpp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,9 @@ You can set the preference 'cpp.clangTidy' to enable the clang-tidy linter inclu
- using the preferences: 'cpp.clangTidyChecks'
- using the file '.clang-tidy' . The file is located in the same folder of the files or a parent folder.

Note: using the preference checks will supersede the value found in the .clang-tidy file.

```
Note: When the "cpp.clangTidyChecks" is used in the preference settings, the configs will be merged with the configuration found in ".clang-tidy" file. If you want to drop the configs from ".clang-tidy", you'd need to disable it in "cpp.clangTidyChecks", which is "cpp.clangTidyChecks": "-*".
```
The syntax used to fill the checks can be found at http://clang.llvm.org/extra/clang-tidy/

clang-tidy has its own checks and can also run Clang static analyzer checks. Each check has a name ([see link above for full list](http://clang.llvm.org/extra/clang-tidy/)). Clang-tidy takes as input the checks that should run, in the form of a comma-separated list of positive and negative (prefixed with -) globs. Positive globs add subsets of checks, negative globs remove them.
Expand All @@ -102,6 +103,27 @@ There are two ways to configure clang-tidy's checks: through a Theia preference
- for the .clang-tidy file: Checks: "-*,readability-*"
- Meaning: disable all list-checks and enable all readability-* checks

### Using clang-tidy as a task
In .theia/tasks.json, add the following:
```
{
"label": "[Task] clang-tidy",
"type": "shell",
"cwd": "${workspaceFolder}",
"command": "clang-tidy",
"args": [
"*"
],
"options": {},
"problemMatcher": [
"$clangTidyMatcher"
]
}
```

If you want a description for each task field, see [theia/packages/task/src/browser/task-schema-updater.ts]( https://github.com/theia-ide/theia/blob/531aa3bde8dea7f022ea41beaee3aace65ce54de/packages/task/src/browser/task-schema-updater.ts#L62 )


## License

- [Eclipse Public License 2.0](http://www.eclipse.org/legal/epl-2.0/)
Expand Down
24 changes: 24 additions & 0 deletions packages/cpp/src/browser/cpp-task-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import parseArgv = require('string-argv');
import { inject, injectable, postConstruct } from 'inversify';
import { ProblemMatcherRegistry, ProblemPatternRegistry } from '@theia/task/lib/common/task-protocol';
import { ProcessTaskConfiguration } from '@theia/task/lib/common/process/task-protocol';
import { TaskContribution, TaskProvider, TaskProviderRegistry, TaskResolver, TaskResolverRegistry } from '@theia/task/lib/browser/task-contribution';
import { CppBuildConfigurationManager, CppBuildConfiguration } from './cpp-build-configurations';
Expand All @@ -37,10 +38,33 @@ export class CppTaskProvider implements TaskContribution, TaskProvider, TaskReso
@inject(TaskResolverRegistry) protected readonly taskResolverRegistry: TaskResolverRegistry;
@inject(TaskDefinitionRegistry) protected readonly taskDefinitionRegistry: TaskDefinitionRegistry;
@inject(CppBuildConfigurationManager) protected readonly cppBuildConfigurationManager: CppBuildConfigurationManager;
@inject(ProblemMatcherRegistry) protected readonly problemMatcherRegistry: ProblemMatcherRegistry;
@inject(ProblemPatternRegistry) protected readonly problemPatternRegistry: ProblemPatternRegistry;

@postConstruct()
protected init(): void {
this.registerTaskDefinition();
this.problemPatternRegistry.register({
'name': 'clangTidyPattern',
'regexp': '^(.+):(\\d+):(\\d+):\\s+(error|warning|info|note):\\s+(.+?)\\s+\\[(.+)\\]$',
'file': 1,
'line': 2,
'character': 3,
'severity': 4,
'message': 5,
'code': 6
});
this.problemMatcherRegistry.register({
'name': 'clangTidyMatcher',
'label': 'for clangd',
'owner': 'clang-tidy',
'source': 'clang-tidy-task',
'applyTo': 'alldocuments',
'fileLocation': [
'absolute'
],
'pattern': 'clangTidyPattern'
});
}

registerProviders(registry: TaskProviderRegistry) {
Expand Down

0 comments on commit a1c780c

Please sign in to comment.