• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pantsbuild / pants / 25441711719

06 May 2026 02:31PM UTC coverage: 92.915%. Remained the same
25441711719

push

github

web-flow
use sha pin (with comment) format for generated actions (#23312)

Per the GitHub Action best practices we recently enabled at #23249, we
should pin each action to a SHA so that the reference is actually
immutable.

This will -- I hope -- knock out a large chunk of the 421 alerts we
currently get from zizmor. The next followup would then be upgrades and
harmonizing the generated and none-generated pins.

Notice: This idea was suggested by Claude while going over pinact output
and I was surprised to see that post processing the yaml wasn't too
gross.

92206 of 99237 relevant lines covered (92.91%)

4.04 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.71
/src/python/pants/backend/java/bsp/rules.py
1
# Copyright 2022 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3
import logging
2✔
4
from dataclasses import dataclass
2✔
5

6
from pants.backend.java.bsp.spec import JavacOptionsItem, JavacOptionsParams, JavacOptionsResult
2✔
7
from pants.backend.java.target_types import JavaFieldSet, JavaSourceField
2✔
8
from pants.base.build_root import BuildRoot
2✔
9
from pants.bsp.protocol import BSPHandlerMapping
2✔
10
from pants.bsp.spec.base import BuildTargetIdentifier
2✔
11
from pants.bsp.util_rules.lifecycle import BSPLanguageSupport
2✔
12
from pants.bsp.util_rules.queries import compute_handler_query_rules
2✔
13
from pants.bsp.util_rules.targets import (
2✔
14
    BSPBuildTargetsMetadataRequest,
15
    BSPBuildTargetsMetadataResult,
16
    BSPCompileRequest,
17
    BSPCompileResult,
18
    BSPResourcesRequest,
19
    BSPResourcesResult,
20
)
21
from pants.engine.internals.selectors import concurrently
2✔
22
from pants.engine.rules import collect_rules, implicitly, rule
2✔
23
from pants.engine.target import FieldSet
2✔
24
from pants.engine.unions import UnionRule
2✔
25
from pants.jvm.bsp.compile import _jvm_bsp_compile, jvm_classes_directory
2✔
26
from pants.jvm.bsp.compile import rules as jvm_compile_rules
2✔
27
from pants.jvm.bsp.resources import _jvm_bsp_resources
2✔
28
from pants.jvm.bsp.resources import rules as jvm_resources_rules
2✔
29
from pants.jvm.compile import ClasspathEntryRequestFactory
2✔
30
from pants.jvm.target_types import JvmResolveField
2✔
31

32
LANGUAGE_ID = "java"
2✔
33

34
_logger = logging.getLogger(__name__)
2✔
35

36

37
class JavaBSPLanguageSupport(BSPLanguageSupport):
2✔
38
    language_id = LANGUAGE_ID
2✔
39
    can_compile = True
2✔
40
    can_provide_resources = True
2✔
41

42

43
@dataclass(frozen=True)
2✔
44
class JavaMetadataFieldSet(FieldSet):
2✔
45
    required_fields = (JavaSourceField, JvmResolveField)
2✔
46

47
    source: JavaSourceField
48
    resolve: JvmResolveField
49

50

51
class JavaBSPBuildTargetsMetadataRequest(BSPBuildTargetsMetadataRequest):
2✔
52
    language_id = LANGUAGE_ID
2✔
53
    can_merge_metadata_from = ()
2✔
54
    field_set_type = JavaMetadataFieldSet
2✔
55

56
    resolve_prefix = "jvm"
2✔
57
    resolve_field = JvmResolveField
2✔
58

59

60
@rule
2✔
61
async def bsp_resolve_java_metadata(
2✔
62
    _: JavaBSPBuildTargetsMetadataRequest,
63
) -> BSPBuildTargetsMetadataResult:
64
    return BSPBuildTargetsMetadataResult()
1✔
65

66

67
# -----------------------------------------------------------------------------------------------
68
# Javac Options Request
69
# See https://build-server-protocol.github.io/docs/extensions/java.html#javac-options-request
70
# -----------------------------------------------------------------------------------------------
71

72

73
class JavacOptionsHandlerMapping(BSPHandlerMapping):
2✔
74
    method_name = "buildTarget/javacOptions"
2✔
75
    request_type = JavacOptionsParams
2✔
76
    response_type = JavacOptionsResult
2✔
77

78

79
@dataclass(frozen=True)
2✔
80
class HandleJavacOptionsRequest:
2✔
81
    bsp_target_id: BuildTargetIdentifier
82

83

84
@dataclass(frozen=True)
2✔
85
class HandleJavacOptionsResult:
2✔
86
    item: JavacOptionsItem
87

88

89
@rule
2✔
90
async def handle_bsp_java_options_request(
2✔
91
    request: HandleJavacOptionsRequest,
92
    build_root: BuildRoot,
93
) -> HandleJavacOptionsResult:
94
    return HandleJavacOptionsResult(
×
95
        JavacOptionsItem(
96
            target=request.bsp_target_id,
97
            options=(),
98
            classpath=(),
99
            # TODO: Why is this hardcoded and not under pants_workdir?
100
            class_directory=build_root.pathlib_path.joinpath(
101
                ".pants.d", "bsp", jvm_classes_directory(request.bsp_target_id)
102
            ).as_uri(),
103
        )
104
    )
105

106

107
@rule
2✔
108
async def bsp_javac_options_request(request: JavacOptionsParams) -> JavacOptionsResult:
2✔
109
    results = await concurrently(
×
110
        handle_bsp_java_options_request(HandleJavacOptionsRequest(btgt), **implicitly())
111
        for btgt in request.targets
112
    )
113
    return JavacOptionsResult(items=tuple(result.item for result in results))
×
114

115

116
# -----------------------------------------------------------------------------------------------
117
# Compile Request
118
# -----------------------------------------------------------------------------------------------
119

120

121
@dataclass(frozen=True)
2✔
122
class JavaBSPCompileRequest(BSPCompileRequest):
2✔
123
    field_set_type = JavaFieldSet
2✔
124

125

126
@rule
2✔
127
async def bsp_java_compile_request(
2✔
128
    request: JavaBSPCompileRequest, classpath_entry_request: ClasspathEntryRequestFactory
129
) -> BSPCompileResult:
130
    result: BSPCompileResult = await _jvm_bsp_compile(request, classpath_entry_request)
1✔
131
    return result
1✔
132

133

134
# -----------------------------------------------------------------------------------------------
135
# Resources Request
136
# -----------------------------------------------------------------------------------------------
137

138

139
@dataclass(frozen=True)
2✔
140
class JavaBSPResourcesRequest(BSPResourcesRequest):
2✔
141
    field_set_type = JavaFieldSet
2✔
142

143

144
@rule
2✔
145
async def bsp_java_resources_request(
2✔
146
    request: JavaBSPResourcesRequest,
147
    build_root: BuildRoot,
148
) -> BSPResourcesResult:
149
    result: BSPResourcesResult = await _jvm_bsp_resources(request, build_root)
1✔
150
    return result
1✔
151

152

153
def rules():
2✔
154
    base_rules = (
2✔
155
        *collect_rules(),
156
        *jvm_compile_rules(),
157
        *jvm_resources_rules(),
158
        UnionRule(BSPLanguageSupport, JavaBSPLanguageSupport),
159
        UnionRule(BSPBuildTargetsMetadataRequest, JavaBSPBuildTargetsMetadataRequest),
160
        UnionRule(BSPHandlerMapping, JavacOptionsHandlerMapping),
161
        UnionRule(BSPCompileRequest, JavaBSPCompileRequest),
162
        UnionRule(BSPResourcesRequest, JavaBSPResourcesRequest),
163
    )
164
    return (*base_rules, *compute_handler_query_rules(base_rules))
2✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc