| # Copyright 2023 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| def recipe_style_guide(ctx): |
| """Enforces http://go/fuchsia-recipe-docs#style-guide.""" |
| for f in ctx.scm.affected_files(): |
| if f.endswith(".json") and ".expected" in f: |
| test_name = f.split("/")[-1].rsplit(".", 1)[0] |
| if " " in test_name: |
| # It would be nicer to parse the recipe file to find test case |
| # names because then we could emit the annotation at the place |
| # where the test name is defined. But because tests are |
| # generated by arbitrary Python code, it's practically |
| # impossible to parse out their names in a foolproof way. |
| ctx.emit.annotation( |
| filepath = f, |
| message = "Test name %r should not contain spaces" % test_name, |
| level = "error", |
| ) |
| |
| if not f.endswith(".py"): |
| continue |
| res = ctx.os.exec(["python3", "scripts/enforce_style_guide.py", f]) |
| for finding in json.decode(res.stdout): |
| ctx.emit.annotation( |
| filepath = f, |
| **finding |
| ) |
| |
| shac.register_check(recipe_style_guide) |