// Copyright 2020 The Android Open Source Project
//
// 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 rust

import (
	"android/soong/rust/config"
)

type ClippyProperties struct {
	// whether to run clippy.
	Clippy *bool
}

type clippy struct {
	Properties ClippyProperties
}

func (c *clippy) props() []interface{} {
	return []interface{}{&c.Properties}
}

func (c *clippy) flags(ctx ModuleContext, flags Flags, deps PathDeps) (Flags, PathDeps) {
	if c.Properties.Clippy != nil && !*c.Properties.Clippy {
		return flags, deps
	}
	enabled, lints := config.ClippyLintsForDir(ctx.ModuleDir())
	flags.Clippy = enabled
	flags.ClippyFlags = append(flags.ClippyFlags, lints)
	return flags, deps
}
