| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- # Part of the Carbon Language project, under the Apache License v2.0 with LLVM
- # Exceptions. See /LICENSE for license information.
- # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")
- package(default_visibility = ["//bazel/check_deps:__pkg__"])
- # See README.md for instructions on tree-sitter setup and use. These rules are
- # manual because the tree-sitter invocation is non-hermetic, and most developers
- # won't have it installed; we don't want to break "bazel test //..." if we can
- # avoid it.
- #
- # We use tree-sitter non-hermetically for two key reasons:
- #
- # - The main way of hermetically using npms in bazel, `aspect_rules_js`, uses
- # declare_symlink; we disallow that for important compatibility reasons.
- # - When generated, src/parser.c is over 500 KB, which is larger than we want to
- # check in. It should also be expected to grow if the grammar becomes more complete.
- # Convenience target for running all tests, including manual tests.
- test_suite(
- name = "tests",
- tags = ["manual"],
- tests = [
- ":explorer_tests",
- ":string_fail_tests",
- ":string_tests",
- ],
- )
- # Call tree-sitter to generate parser files.
- genrule(
- name = "parser_files",
- srcs = ["grammar.js"],
- outs = [
- "src/parser.c",
- "src/tree_sitter/parser.h",
- ],
- cmd = "tree-sitter generate $(location grammar.js) &&\n" +
- "cp src/parser.c $(location src/parser.c) &&\n" +
- "cp src/tree_sitter/parser.h $(location src/tree_sitter/parser.h)",
- tags = ["manual"],
- )
- cc_library(
- name = "parser",
- srcs = [
- "src/scanner.c",
- ":src/parser.c",
- ],
- hdrs = [":src/tree_sitter/parser.h"],
- copts = ["-Wno-missing-prototypes"],
- tags = ["manual"],
- deps = ["@tree-sitter-bazel//:tree-sitter"],
- )
- cc_binary(
- name = "test_runner",
- testonly = 1,
- srcs = ["test_runner.cpp"],
- tags = ["manual"],
- deps = [
- ":parser",
- ],
- )
- cc_test(
- name = "explorer_tests",
- size = "small",
- srcs = ["test_runner.cpp"],
- args = ["$(locations //explorer:tree_sitter_testdata)"],
- data = ["//explorer:tree_sitter_testdata"],
- tags = ["manual"],
- deps = [
- ":parser",
- ],
- )
- filegroup(
- name = "string_testdata",
- srcs = glob(
- ["testdata/string/*.carbon"],
- exclude = ["testdata/string/fail_*.carbon"],
- ),
- )
- filegroup(
- name = "string_fail_testdata",
- srcs = glob(["testdata/string/fail_*.carbon"]),
- )
- cc_test(
- name = "string_tests",
- size = "small",
- srcs = ["test_runner.cpp"],
- args = ["$(locations :string_testdata)"],
- data = [":string_testdata"],
- tags = ["manual"],
- deps = [
- ":parser",
- ],
- )
- cc_test(
- name = "string_fail_tests",
- size = "small",
- srcs = ["test_runner.cpp"],
- args = ["$(locations :string_fail_testdata)"],
- data = [":string_fail_testdata"],
- env = {
- "FAIL_TESTS": "1",
- },
- tags = ["manual"],
- deps = [
- ":parser",
- ],
- )
|