Skip to content

Commit bc1d29e

Browse files
michalmuskalafacebook-github-bot
authored andcommitted
erlang: rip out edoc
Summary: OTP 27 introduces the new `-moduledoc` and `-doc` mechanism integrated into the compiler. This removes support from buck2 for the legacy edoc mechanism, that required forking parts of OTP and a lot of workarounds to get it working properly. Reviewed By: TD5, TheGeorge Differential Revision: D74240702 fbshipit-source-id: 3d2df545f2e397879ab6f71dd457842b52fb1222
1 parent 43b056d commit bc1d29e

File tree

10 files changed

+7
-787
lines changed

10 files changed

+7
-787
lines changed

prelude/decls/erlang_rules.bzl

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,6 @@ rules_attributes = {
8888
or `included_applications` buck2 checks that the target definitions and information in the template are equivalent to
8989
prevent these definitions from drifting apart during migration._
9090
"""),
91-
"build_edoc_chunks": attrs.bool(default = False, doc = """
92-
This attribute controls if the output of the builds also create edoc chunks.
93-
"""),
9491
"env": attrs.option(attrs.dict(key = attrs.string(), value = attrs.string()), default = None, doc = """
9592
The `env` field allows to set the application env variables. The key value pairs will materialise in the application's `.app`
9693
file and can then be accessed by [`application:get_env/2`](https://www.erlang.org/doc/man/application.html#get_env-2).

prelude/erlang/erlang_application.bzl

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -186,15 +186,6 @@ def _build_erlang_application(ctx: AnalysisContext, toolchain: Toolchain, depend
186186
src_artifacts,
187187
)
188188

189-
# edoc chunks (only materialised in edoc subtarget)
190-
build_environment = erlang_build.build_steps.generate_chunk_artifacts(
191-
ctx,
192-
toolchain,
193-
build_environment,
194-
name,
195-
src_artifacts,
196-
)
197-
198189
# create <appname>.app file
199190
build_environment = _generate_app_file(
200191
ctx,
@@ -337,7 +328,6 @@ def link_output(
337328

338329
ebin = build_environment.app_beams.values() + [build_environment.app_files[name]]
339330
include = build_environment.include_dirs[name]
340-
chunks = build_environment.app_chunks.values()
341331
priv = build_environment.priv_dirs[name]
342332

343333
ebin = {
@@ -347,18 +337,9 @@ def link_output(
347337

348338
srcs = _link_srcs_folder(ctx)
349339

350-
if getattr(ctx.attrs, "build_edoc_chunks", False):
351-
edoc = {
352-
paths.join("doc", "chunks", chunk_file.basename): chunk_file
353-
for chunk_file in chunks
354-
}
355-
else:
356-
edoc = {}
357-
358340
link_spec = {}
359341
link_spec.update(ebin)
360342
link_spec.update(srcs)
361-
link_spec.update(edoc)
362343
link_spec["include"] = include
363344
link_spec["priv"] = priv
364345

prelude/erlang/erlang_build.bzl

Lines changed: 7 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ BuildEnvironment = record(
5151
# convenience storrage
5252
app_includes = field(IncludesMapping, {}),
5353
app_beams = field(ModuleArtifactMapping, {}),
54-
app_chunks = field(ModuleArtifactMapping, {}),
5554
# input artifact mapping
5655
input_mapping = field(InputArtifactMapping, {}),
5756
)
@@ -61,11 +60,6 @@ DepInfo = record(
6160
path = field(str),
6261
)
6362

64-
Anchor = record(
65-
artifact = field(Artifact),
66-
dirname = field(str),
67-
)
68-
6963
def _prepare_build_environment(
7064
ctx: AnalysisContext,
7165
toolchain: Toolchain,
@@ -175,7 +169,6 @@ def _generate_input_mapping(build_environment: BuildEnvironment, input_artifacts
175169
app_files = build_environment.app_files,
176170
app_includes = build_environment.app_includes,
177171
app_beams = build_environment.app_beams,
178-
app_chunks = build_environment.app_chunks,
179172
)
180173

181174
def _generated_source_artifacts(ctx: AnalysisContext, toolchain: Toolchain, name: str) -> PathArtifactMapping:
@@ -288,51 +281,6 @@ def _generate_beam_artifacts(
288281

289282
return updated_build_environment
290283

291-
def _generate_chunk_artifacts(
292-
ctx: AnalysisContext,
293-
toolchain: Toolchain,
294-
build_environment: BuildEnvironment,
295-
name: str,
296-
src_artifacts: list[Artifact]) -> BuildEnvironment:
297-
anchor = _make_dir_anchor(ctx, paths.join(_build_dir(toolchain), name, "chunks"))
298-
299-
chunk_mapping = {
300-
module_name(src): ctx.actions.declare_output(chunk_path(anchor, src))
301-
for src in src_artifacts
302-
}
303-
304-
updated_build_environment = BuildEnvironment(
305-
app_chunks = chunk_mapping,
306-
# copied fields
307-
includes = build_environment.includes,
308-
private_includes = build_environment.private_includes,
309-
beams = build_environment.beams,
310-
priv_dirs = build_environment.priv_dirs,
311-
include_dirs = build_environment.include_dirs,
312-
private_include_dir = build_environment.private_include_dir,
313-
deps_files = build_environment.deps_files,
314-
app_files = build_environment.app_files,
315-
app_includes = build_environment.app_includes,
316-
app_beams = build_environment.app_beams,
317-
input_mapping = build_environment.input_mapping,
318-
)
319-
320-
preprocess_modules = toolchain.edoc_preprocess
321-
preprocess_all = "__all__" in preprocess_modules
322-
323-
for erl in src_artifacts:
324-
preprocess = preprocess_all or module_name(erl) in preprocess_modules
325-
_build_edoc(ctx, toolchain, updated_build_environment, erl, chunk_mapping[module_name(erl)], preprocess)
326-
327-
return updated_build_environment
328-
329-
def _make_dir_anchor(ctx: AnalysisContext, path: str) -> Anchor:
330-
artifact = ctx.actions.write(
331-
paths.normalize(paths.join(path, ".hidden")),
332-
cmd_args([""]),
333-
)
334-
return Anchor(dirname = paths.dirname(artifact.short_path), artifact = artifact)
335-
336284
def _get_deps_files(
337285
ctx: AnalysisContext,
338286
toolchain: Toolchain,
@@ -449,48 +397,6 @@ def _build_erl(
449397
ctx.actions.dynamic_output(dynamic = [final_dep_file], inputs = [src], outputs = [output.as_output()], f = dynamic_lambda)
450398
return None
451399

452-
def _build_edoc(
453-
ctx: AnalysisContext,
454-
toolchain: Toolchain,
455-
build_environment: BuildEnvironment,
456-
src: Artifact,
457-
output: Artifact,
458-
preprocess: bool) -> None:
459-
"""Build edoc from erl files."""
460-
eval_cmd = cmd_args(
461-
toolchain.otp_binaries.escript,
462-
toolchain.edoc,
463-
cmd_args(toolchain.edoc_options),
464-
"-app",
465-
ctx.attrs.name,
466-
"-files",
467-
src,
468-
"-chunks",
469-
"-pa",
470-
toolchain.utility_modules,
471-
"-o",
472-
cmd_args(output.as_output(), parent = 2),
473-
)
474-
475-
if not preprocess:
476-
eval_cmd.add("-no-preprocess")
477-
478-
private_include = build_environment.private_include_dir
479-
public_includes = build_environment.include_dirs.values()
480-
eval_cmd.add(cmd_args(private_include, prepend = "-I"))
481-
eval_cmd.add(cmd_args(public_includes, prepend = "-I"))
482-
eval_cmd.add(cmd_args(public_includes, prepend = "-I", parent = 2))
483-
484-
_run_with_env(
485-
ctx,
486-
toolchain,
487-
eval_cmd,
488-
always_print_stderr = True,
489-
category = "edoc",
490-
identifier = action_identifier(toolchain, src.basename),
491-
)
492-
return None
493-
494400
def _dependencies_to_args(
495401
artifacts,
496402
final_dep_file: Artifact,
@@ -636,18 +542,6 @@ def generated_erl_path(toolchain: Toolchain, appname: str, src: Artifact) -> str
636542
"%s.erl" % (module_name(src),),
637543
)
638544

639-
def anchor_path(anchor: Anchor, basename: str) -> str:
640-
""" Returns the output path for hrl files. """
641-
return paths.join(anchor.dirname, basename)
642-
643-
def beam_path(anchor: Anchor, src: Artifact) -> str:
644-
""" Returns the output path for beam files. """
645-
return anchor_path(anchor, module_name(src) + ".beam")
646-
647-
def chunk_path(anchor: Anchor, src: Artifact) -> str:
648-
"""Returns the output path for chunk files."""
649-
return anchor_path(anchor, module_name(src) + ".chunk")
650-
651545
def module_name(in_file: Artifact) -> str:
652546
""" Returns the basename of the artifact without extension """
653547
end = in_file.basename.rfind(".")
@@ -760,18 +654,20 @@ default_escript_args = cmd_args(
760654
"minimal",
761655
"-noinput",
762656
"-noshell",
657+
"-run",
658+
"escript",
659+
"start",
763660
)
764661

765662
def _run_escript(ctx: AnalysisContext, toolchain: Toolchain, script: Artifact, args: cmd_args, **kwargs) -> None:
766663
""" run escript with env and providing toolchain-configured utility modules"""
767664
cmd = cmd_args(
768665
toolchain.otp_binaries.erl,
769666
default_escript_args,
770-
"-pa",
771-
toolchain.utility_modules,
772-
"-run",
773-
"escript",
774-
"start",
667+
)
668+
if toolchain.utility_modules:
669+
cmd.add("-pa", toolchain.utility_modules)
670+
cmd.add(
775671
"--",
776672
script,
777673
args,
@@ -809,7 +705,6 @@ def _peek_private_includes(
809705
app_files = build_environment.app_files,
810706
app_includes = build_environment.app_includes,
811707
app_beams = build_environment.app_beams,
812-
app_chunks = build_environment.app_chunks,
813708
input_mapping = build_environment.input_mapping,
814709
)
815710

@@ -822,7 +717,6 @@ erlang_build = struct(
822717
generated_source_artifacts = _generated_source_artifacts,
823718
generate_include_artifacts = _generate_include_artifacts,
824719
generate_beam_artifacts = _generate_beam_artifacts,
825-
generate_chunk_artifacts = _generate_chunk_artifacts,
826720
),
827721
utils = struct(
828722
is_hrl = _is_hrl,
@@ -832,7 +726,6 @@ erlang_build = struct(
832726
is_config = _is_config,
833727
module_name = module_name,
834728
private_include_name = private_include_name,
835-
make_dir_anchor = _make_dir_anchor,
836729
build_dir = _build_dir,
837730
run_with_env = _run_with_env,
838731
run_escript = _run_escript,

prelude/erlang/erlang_info.bzl

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,6 @@ ErlangToolchainInfo = provider(
106106
"release_variables_builder": provider_field(typing.Any, default = None),
107107
# copying erts
108108
"include_erts": provider_field(typing.Any, default = None),
109-
# edoc-generating escript
110-
"edoc": provider_field(typing.Any, default = None),
111-
"edoc_options": provider_field(typing.Any, default = None),
112-
"edoc_preprocess": provider_field(list[str], default = []),
113109
# beams we need for various reasons
114110
"utility_modules": provider_field(typing.Any, default = None),
115111
# env to be set for toolchain invocations

prelude/erlang/erlang_tests.bzl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,6 @@ def erlang_test_impl(ctx: AnalysisContext) -> list[Provider]:
160160
# convenience storrage
161161
app_includes = pre_build_environment.app_includes,
162162
app_beams = pre_build_environment.app_beams,
163-
app_chunks = pre_build_environment.app_chunks,
164163
# input mapping
165164
input_mapping = pre_build_environment.input_mapping,
166165
)

prelude/erlang/erlang_toolchain.bzl

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,6 @@ Toolchain = record(
4949
core_parse_transforms = field(dict[str, (Artifact, Artifact)]),
5050
parse_transforms = field(dict[str, (Artifact, Artifact)]),
5151
parse_transforms_filters = field(dict[str, list[str]]),
52-
edoc = field(Artifact),
53-
edoc_options = field(list[str]),
54-
edoc_preprocess = field(list[str]),
5552
utility_modules = field(Artifact),
5653
env = field(dict[str, str]),
5754
)
@@ -64,7 +61,6 @@ ToolchainUtillInfo = provider(
6461
"core_parse_transforms": provider_field(typing.Any, default = None),
6562
"dependency_analyzer": provider_field(typing.Any, default = None),
6663
"dependency_finalizer": provider_field(typing.Any, default = None),
67-
"edoc": provider_field(typing.Any, default = None),
6864
"erlc_trampoline": provider_field(typing.Any, default = None),
6965
"escript_trampoline": provider_field(typing.Any, default = None),
7066
"escript_builder": provider_field(typing.Any, default = None),
@@ -107,9 +103,6 @@ def _multi_version_toolchain_impl(ctx: AnalysisContext) -> list[Provider]:
107103
core_parse_transforms = toolchain_info.core_parse_transforms,
108104
parse_transforms = toolchain_info.parse_transforms,
109105
parse_transforms_filters = toolchain_info.parse_transforms_filters,
110-
edoc = toolchain_info.edoc,
111-
edoc_options = toolchain_info.edoc_options,
112-
edoc_preprocess = toolchain_info.edoc_preprocess,
113106
utility_modules = toolchain_info.utility_modules,
114107
env = toolchain_info.env,
115108
)
@@ -136,8 +129,6 @@ def _config_erlang_toolchain_impl(ctx: AnalysisContext) -> list[Provider]:
136129
# split the options string to get a list of options
137130
erl_opts = ctx.attrs.erl_opts.split()
138131
emu_flags = ctx.attrs.emu_flags.split()
139-
edoc_options = ctx.attrs.edoc_options.split()
140-
edoc_preprocess = ctx.attrs.edoc_preprocess.split()
141132

142133
# get otp binaries
143134
binaries_info = ctx.attrs.otp_binaries[ErlangOTPBinariesInfo]
@@ -197,9 +188,6 @@ def _config_erlang_toolchain_impl(ctx: AnalysisContext) -> list[Provider]:
197188
core_parse_transforms = core_parse_transforms,
198189
parse_transforms = parse_transforms,
199190
parse_transforms_filters = ctx.attrs.parse_transforms_filters,
200-
edoc = utils.edoc,
201-
edoc_options = edoc_options,
202-
edoc_preprocess = edoc_preprocess,
203191
utility_modules = utility_modules,
204192
),
205193
]
@@ -279,8 +267,6 @@ config_erlang_toolchain_rule = rule(
279267
impl = _config_erlang_toolchain_impl,
280268
attrs = {
281269
"core_parse_transforms": attrs.list(attrs.dep(), default = ["@prelude//erlang/toolchain:transform_project_root"]),
282-
"edoc_options": attrs.string(default = ""),
283-
"edoc_preprocess": attrs.string(default = ""),
284270
"emu_flags": attrs.string(default = ""),
285271
"env": attrs.dict(key = attrs.string(), value = attrs.string(), default = {}),
286272
"erl_opts": attrs.string(default = ""),
@@ -359,7 +345,6 @@ def _toolchain_utils(ctx: AnalysisContext) -> list[Provider]:
359345
core_parse_transforms = ctx.attrs.core_parse_transforms,
360346
dependency_analyzer = ctx.attrs.dependency_analyzer,
361347
dependency_finalizer = ctx.attrs.dependency_finalizer,
362-
edoc = ctx.attrs.edoc,
363348
erlc_trampoline = ctx.attrs.erlc_trampoline,
364349
escript_trampoline = ctx.attrs.escript_trampoline,
365350
escript_builder = ctx.attrs.escript_builder,
@@ -377,7 +362,6 @@ toolchain_utilities = rule(
377362
"core_parse_transforms": attrs.list(attrs.dep()),
378363
"dependency_analyzer": attrs.source(),
379364
"dependency_finalizer": attrs.source(),
380-
"edoc": attrs.source(),
381365
"erlc_trampoline": attrs.source(),
382366
"escript_builder": attrs.source(),
383367
"escript_trampoline": attrs.source(),

prelude/erlang/toolchain/BUCK

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,12 @@ toolchain_utilities(
2929
core_parse_transforms = [":transform_project_root"],
3030
dependency_analyzer = "dependency_analyzer.escript",
3131
dependency_finalizer = "dependency_finalizer.escript",
32-
edoc = "edoc_cli.escript",
3332
erlc_trampoline = "erlc_trampoline.sh",
3433
escript_builder = "escript_builder.escript",
3534
escript_trampoline = "escript_trampoline.sh",
3635
include_erts = "include_erts.escript",
3736
release_variables_builder = "release_variables_builder.escript",
3837
utility_modules = [
39-
"edoc_doclet_chunks.erl",
40-
"edoc_report.erl",
4138
],
4239
visibility = ["PUBLIC"],
4340
)

0 commit comments

Comments
 (0)