-
Notifications
You must be signed in to change notification settings - Fork 134
/
validate.go
56 lines (50 loc) · 1.99 KB
/
validate.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// Copyright (C) 2017 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Package validate registers and implements the "validate" apic command.
//
// The validate command analyses the specified API for correctness, reporting errors if any problems
// are found.
package validate
import (
"sort"
"github.com/google/gapid/gapil/analysis"
"github.com/google/gapid/gapil/semantic"
)
// Options controls the validation that's performed.
type Options struct {
CheckUnused bool // Should unused types, fields, etc be reported?
}
// Validate performs a number of checks on the api file for correctness.
// If any problems are found then they are returned as errors.
// If options is nil then full validation is performed.
func Validate(api *semantic.API, mappings *semantic.Mappings, options *Options) Issues {
res := analysis.Analyze(api, mappings)
return WithAnalysis(api, mappings, options, res)
}
// WithAnalysis performs a number of checks on the api file for
// correctness using pre-built analysis results.
// If any problems are found then they are returned as errors.
// If options is nil then full validation is performed.
func WithAnalysis(api *semantic.API, mappings *semantic.Mappings, options *Options, analysis *analysis.Results) Issues {
if options == nil {
options = &Options{true}
}
issues := Issues{}
if options.CheckUnused {
issues = append(issues, noUnused(api, mappings)...)
}
issues = append(issues, inspect(api, mappings, analysis)...)
sort.Sort(issues)
return issues
}