From 5096d863b0dd20627dce3dd76fe5818744e75e9f Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Thu, 6 Jan 2022 07:43:03 -0700 Subject: [PATCH 1/8] Added the ability to specify the version for swiftformat. --- examples/simple/WORKSPACE | 2 +- swiftformat/load_package.bzl | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/examples/simple/WORKSPACE b/examples/simple/WORKSPACE index 4370482..9640eb2 100644 --- a/examples/simple/WORKSPACE +++ b/examples/simple/WORKSPACE @@ -39,4 +39,4 @@ swift_rules_extra_dependencies() load("@cgrindel_rules_swiftformat//swiftformat:load_package.bzl", "swiftformat_load_package") -swiftformat_load_package() +swiftformat_load_package(version = "0.49.1") diff --git a/swiftformat/load_package.bzl b/swiftformat/load_package.bzl index c355fd2..d82c4c9 100644 --- a/swiftformat/load_package.bzl +++ b/swiftformat/load_package.bzl @@ -1,16 +1,21 @@ load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") load("@cgrindel_rules_spm//spm:spm.bzl", "spm_pkg", "spm_repositories") -def swiftformat_load_package(): +def swiftformat_load_package(version = None): + spm_pkg_args = { + "url": "https://github.com/nicklockwood/SwiftFormat.git", + "products": ["swiftformat"], + } + if version == None: + spm_pkg_args["from_version"] = "0.0.0" + else: + spm_pkg_args["exact_version"] = version + maybe( spm_repositories, name = "swiftformat_repos", dependencies = [ - spm_pkg( - "https://github.com/nicklockwood/SwiftFormat.git", - from_version = "0.0.0", - products = ["swiftformat"], - ), + spm_pkg(**spm_pkg_args), ], platforms = [".macOS(.v10_12)"], ) From 6163481ce148d46fc00a85733653e08631921ce0 Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Thu, 6 Jan 2022 07:59:44 -0700 Subject: [PATCH 2/8] Documenting version. --- README.md | 17 +++++++++++++++++ swiftformat/deps.bzl | 16 ++++++++++++---- swiftformat/load_package.bzl | 2 ++ 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4b6dc23..715f0c3 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,23 @@ $ bazel run //:update_all $ bazel test //... ``` +## Specifying the Version of SwiftFormat + +By default, `rules_swiftformat` will load the [latest release of +SwiftFormat](https://github.com/nicklockwood/SwiftFormat/releases). This works well for most cases. +However, if you would like to specify the SwiftFormat release, you can do so by passing the version +to the `swiftformat_load_package` function in your `WORKSPACE`. + +```python +load("@cgrindel_rules_swiftformat//swiftformat:load_package.bzl", "swiftformat_load_package") + +swiftformat_load_package(version = "0.49.1") +``` + +One reason you may want to do so is to ensure that everyone working on your project is using the +same version of SwiftFormat. Without the version specification, Bazel will cache whichever version +was the latest when the project was run for the first time or when the cache was cleared. + ## Learn More - [How It Works](/doc/how_it_works.md) diff --git a/swiftformat/deps.bzl b/swiftformat/deps.bzl index 772f7ce..66c3298 100644 --- a/swiftformat/deps.bzl +++ b/swiftformat/deps.bzl @@ -23,12 +23,20 @@ def swiftformat_rules_dependencies(): ], ) + # TODO: FIX ME + + # maybe( + # http_archive, + # name = "cgrindel_rules_spm", + # sha256 = "fab28a41793744f3944ad2606cdd9c0f8e2f4861dd29fb1d61aa4263c7a1400a", + # strip_prefix = "rules_spm-0.6.0", + # urls = ["https://github.com/cgrindel/rules_spm/archive/v0.6.0.tar.gz"], + # ) + maybe( - http_archive, + native.local_repository, name = "cgrindel_rules_spm", - sha256 = "fab28a41793744f3944ad2606cdd9c0f8e2f4861dd29fb1d61aa4263c7a1400a", - strip_prefix = "rules_spm-0.6.0", - urls = ["https://github.com/cgrindel/rules_spm/archive/v0.6.0.tar.gz"], + path = "/Users/chuck/code/cgrindel/rules_spm", ) maybe( diff --git a/swiftformat/load_package.bzl b/swiftformat/load_package.bzl index d82c4c9..7c6e721 100644 --- a/swiftformat/load_package.bzl +++ b/swiftformat/load_package.bzl @@ -7,8 +7,10 @@ def swiftformat_load_package(version = None): "products": ["swiftformat"], } if version == None: + # Load the latest 0.x.x version of SwiftFormat. spm_pkg_args["from_version"] = "0.0.0" else: + # Load the specified version of SwiftFormat spm_pkg_args["exact_version"] = version maybe( From 6d648d8bfc8b94af22ff4e5d4a2d489e4da0f8fe Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Thu, 6 Jan 2022 08:12:56 -0700 Subject: [PATCH 3/8] Upgrade starlib. --- swiftformat/deps.bzl | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/swiftformat/deps.bzl b/swiftformat/deps.bzl index 66c3298..ea62a8d 100644 --- a/swiftformat/deps.bzl +++ b/swiftformat/deps.bzl @@ -13,13 +13,12 @@ def swiftformat_rules_dependencies(): sha256 = "c6966ec828da198c5d9adbaa94c05e3a1c7f21bd012a0b29ba8ddbccb2c93b0d", ) - maybe( - http_archive, + http_archive( name = "cgrindel_bazel_starlib", - sha256 = "238c05abf31447b93bd15b616c7413c4c719ee7b5e81c1489ca20f02ce628489", - strip_prefix = "bazel-starlib-0.2.0", + sha256 = "5b36e7f11bf0c1d52480f1b022430611b402b5424979f280f13c52550de76584", + strip_prefix = "bazel-starlib-0.3.0", urls = [ - "http://github.com/cgrindel/bazel-starlib/archive/v0.2.0.tar.gz", + "http://github.com/cgrindel/bazel-starlib/archive/v0.3.0.tar.gz", ], ) From 43b4327447b31792e232b36a4ab125850b2abc27 Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Thu, 6 Jan 2022 08:14:44 -0700 Subject: [PATCH 4/8] Generated doc for repository rules. --- doc/BUILD.bazel | 21 +++++++++++++++++++++ doc/README.md | 1 + doc/repository_rules_overview.md | 32 ++++++++++++++++++++++++++++++++ swiftformat/BUILD.bazel | 3 +++ swiftformat/load_package.bzl | 8 ++++++++ 5 files changed, 65 insertions(+) create mode 100755 doc/repository_rules_overview.md diff --git a/doc/BUILD.bazel b/doc/BUILD.bazel index a0f118d..34ada17 100644 --- a/doc/BUILD.bazel +++ b/doc/BUILD.bazel @@ -31,6 +31,15 @@ _RULES_AND_MACROS_DOC_PROVIDER = doc_providers.create( deps = ["//swiftformat"], ) +_REPOSITORY_RULES_DOC_PROVIDER = doc_providers.create( + name = "repository_rules_overview", + stardoc_input = "//swiftformat:load_package.bzl", + symbols = [ + "swiftformat_load_package", + ], + deps = ["//swiftformat:load_package"], +) + _API_SRCS = [ "src_utils", ] @@ -47,6 +56,7 @@ _API_DOC_PROVIDERS = [ _ALL_DOC_PROVIDERS = [ _RULES_AND_MACROS_DOC_PROVIDER, + _REPOSITORY_RULES_DOC_PROVIDER, _PROVIDERS_DOC_PROVIDER, doc_providers.create( name = "api", @@ -80,6 +90,17 @@ write_header( symbols = _RULES_AND_MACROS_DOC_PROVIDER.symbols, ) +write_header( + name = _REPOSITORY_RULES_DOC_PROVIDER.header_label, + header_content = [ + "# Repository Rules and Macros", + "", + "The rules and macros described below are used to configure and download ", + "dependencies for rules_swiftformat.", + ], + symbols = _REPOSITORY_RULES_DOC_PROVIDER.symbols, +) + # Write the API headers [ write_header( diff --git a/doc/README.md b/doc/README.md index 9784a8a..c3da43c 100644 --- a/doc/README.md +++ b/doc/README.md @@ -13,5 +13,6 @@ ## Reference Documentation - [Rules and Macros](/doc/rules_and_macros_overview.md) +- [Repository Rules and Macros](/doc/repository_rules_overview.md) - [Providers](/doc/providers_overview.md) - [APIs](/doc/api.md) diff --git a/doc/repository_rules_overview.md b/doc/repository_rules_overview.md new file mode 100755 index 0000000..b3ade65 --- /dev/null +++ b/doc/repository_rules_overview.md @@ -0,0 +1,32 @@ + +# Repository Rules and Macros + +The rules and macros described below are used to configure and download +dependencies for rules_swiftformat. + +On this page: + + * [swiftformat_load_package](#swiftformat_load_package) + + + + +## swiftformat_load_package + +
+swiftformat_load_package(version)
+
+ +Loads SwiftFormat using Swift Package Manager via `rules_spm`. + +If a version is not specified, Swift Package Manager will be configured to load the latest release. + + +**PARAMETERS** + + +| Name | Description | Default Value | +| :------------- | :------------- | :------------- | +| version | Optional. A valid semver string for SwiftFormat. | None | + + diff --git a/swiftformat/BUILD.bazel b/swiftformat/BUILD.bazel index 277375e..c4ff4e2 100644 --- a/swiftformat/BUILD.bazel +++ b/swiftformat/BUILD.bazel @@ -17,6 +17,9 @@ bzl_library( bzl_library( name = "load_package", srcs = ["load_package.bzl"], + deps = [ + "@cgrindel_rules_spm//spm", + ], ) bzl_library( diff --git a/swiftformat/load_package.bzl b/swiftformat/load_package.bzl index 7c6e721..f52b6bb 100644 --- a/swiftformat/load_package.bzl +++ b/swiftformat/load_package.bzl @@ -2,6 +2,14 @@ load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") load("@cgrindel_rules_spm//spm:spm.bzl", "spm_pkg", "spm_repositories") def swiftformat_load_package(version = None): + """Loads SwiftFormat using Swift Package Manager via `rules_spm`. + + If a version is not specified, Swift Package Manager will be configured to \ + load the latest release. + + Args: + version: Optional. A valid semver `string` for SwiftFormat. + """ spm_pkg_args = { "url": "https://github.com/nicklockwood/SwiftFormat.git", "products": ["swiftformat"], From 67525b88c3a3d35c2944e9f4fc2ede8a9e794664 Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Thu, 6 Jan 2022 08:19:09 -0700 Subject: [PATCH 5/8] Added TOC. --- README.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 715f0c3..66143e6 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,16 @@ This repository contains Bazel rules and macros that will format Swift source fi [nicklockwood/SwiftFormat](https://github.com/nicklockwood/SwiftFormat), test that the formatted files exist in the workspace directory, and copy the formatted files to the workspace directory. +## Table of Contents + +* [Quickstart](#quickstart) + * [1\. Configure your workspace to use rules\_swiftformat](#1-configure-your-workspace-to-use-rules_swiftformat) + * [2\. Update the BUILD\.bazel at the root of your workspace](#2-update-the-buildbazel-at-the-root-of-your-workspace) + * [3\. Add swiftformat\_pkg to every Bazel package with Swift source files](#3-add-swiftformat_pkg-to-every-bazel-package-with-swift-source-files) + * [4\. Format, Update, and Test](#4-format-update-and-test) +* [Specifying the Version of SwiftFormat](#specifying-the-version-of-swiftformat) +* [Learn More](#learn-more) + ## Quickstart @@ -136,7 +146,7 @@ $ bazel test //... By default, `rules_swiftformat` will load the [latest release of SwiftFormat](https://github.com/nicklockwood/SwiftFormat/releases). This works well for most cases. However, if you would like to specify the SwiftFormat release, you can do so by passing the version -to the `swiftformat_load_package` function in your `WORKSPACE`. +to the [`swiftformat_load_package`](/doc/repository_rules_overview.md#swiftformat_load_package) function in your `WORKSPACE`. ```python load("@cgrindel_rules_swiftformat//swiftformat:load_package.bzl", "swiftformat_load_package") @@ -146,7 +156,7 @@ swiftformat_load_package(version = "0.49.1") One reason you may want to do so is to ensure that everyone working on your project is using the same version of SwiftFormat. Without the version specification, Bazel will cache whichever version -was the latest when the project was run for the first time or when the cache was cleared. +was the latest when the project was run for the first time after the cache was cleared. ## Learn More From dea0113d9a73f0e89158910eea1b828379193f43 Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Thu, 6 Jan 2022 13:10:18 -0700 Subject: [PATCH 6/8] Fixed spm:defs.bzl references. --- swiftformat/BUILD.bazel | 8 +++++++- swiftformat/load_package.bzl | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/swiftformat/BUILD.bazel b/swiftformat/BUILD.bazel index c4ff4e2..4ac552d 100644 --- a/swiftformat/BUILD.bazel +++ b/swiftformat/BUILD.bazel @@ -9,6 +9,11 @@ bzlformat_pkg( update_visibility = ["//:__subpackages__"], ) +bzl_library( + name = "bazel_tools_repo_utils", + srcs = ["@bazel_tools//tools/build_defs/repo:utils.bzl"], +) + bzl_library( name = "deps", srcs = ["deps.bzl"], @@ -18,7 +23,8 @@ bzl_library( name = "load_package", srcs = ["load_package.bzl"], deps = [ - "@cgrindel_rules_spm//spm", + ":bazel_tools_repo_utils", + "@cgrindel_rules_spm//spm:defs", ], ) diff --git a/swiftformat/load_package.bzl b/swiftformat/load_package.bzl index f52b6bb..c1fa359 100644 --- a/swiftformat/load_package.bzl +++ b/swiftformat/load_package.bzl @@ -1,5 +1,5 @@ load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") -load("@cgrindel_rules_spm//spm:spm.bzl", "spm_pkg", "spm_repositories") +load("@cgrindel_rules_spm//spm:defs.bzl", "spm_pkg", "spm_repositories") def swiftformat_load_package(version = None): """Loads SwiftFormat using Swift Package Manager via `rules_spm`. From 6964a617a402339ed54a42338fa5073cb95e715f Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Thu, 6 Jan 2022 13:17:42 -0700 Subject: [PATCH 7/8] Removed providers. --- doc/BUILD.bazel | 21 --------------------- doc/README.md | 1 - doc/providers_overview.md | 29 ----------------------------- swiftformat/BUILD.bazel | 1 - swiftformat/internal/BUILD.bazel | 6 ------ swiftformat/internal/providers.bzl | 9 --------- swiftformat/swiftformat.bzl | 7 ------- 7 files changed, 74 deletions(-) delete mode 100755 doc/providers_overview.md delete mode 100644 swiftformat/internal/providers.bzl diff --git a/doc/BUILD.bazel b/doc/BUILD.bazel index 34ada17..25c77c2 100644 --- a/doc/BUILD.bazel +++ b/doc/BUILD.bazel @@ -9,15 +9,6 @@ load( # MARK: - Documentation Providers -_PROVIDERS_DOC_PROVIDER = doc_providers.create( - name = "providers_overview", - stardoc_input = "//swiftformat:swiftformat.bzl", - symbols = [ - "SwiftFormatInfo", - ], - deps = ["//swiftformat"], -) - _RULES_AND_MACROS_DOC_PROVIDER = doc_providers.create( name = "rules_and_macros_overview", stardoc_input = "//swiftformat:swiftformat.bzl", @@ -57,7 +48,6 @@ _API_DOC_PROVIDERS = [ _ALL_DOC_PROVIDERS = [ _RULES_AND_MACROS_DOC_PROVIDER, _REPOSITORY_RULES_DOC_PROVIDER, - _PROVIDERS_DOC_PROVIDER, doc_providers.create( name = "api", is_stardoc = False, @@ -68,17 +58,6 @@ _ALL_DOC_PROVIDERS = [ # MARK: - Headers -write_header( - name = _PROVIDERS_DOC_PROVIDER.header_label, - header_content = [ - "# Providers", - "", - "The providers described below are used by [the rules](/doc/rules_and_macros_overview.md) to", - "pass along information about the source files and the formatted files.", - ], - symbols = _PROVIDERS_DOC_PROVIDER.symbols, -) - write_header( name = _RULES_AND_MACROS_DOC_PROVIDER.header_label, header_content = [ diff --git a/doc/README.md b/doc/README.md index c3da43c..fa2ae60 100644 --- a/doc/README.md +++ b/doc/README.md @@ -14,5 +14,4 @@ - [Rules and Macros](/doc/rules_and_macros_overview.md) - [Repository Rules and Macros](/doc/repository_rules_overview.md) -- [Providers](/doc/providers_overview.md) - [APIs](/doc/api.md) diff --git a/doc/providers_overview.md b/doc/providers_overview.md deleted file mode 100755 index 253e351..0000000 --- a/doc/providers_overview.md +++ /dev/null @@ -1,29 +0,0 @@ - -# Providers - -The providers described below are used by [the rules](/doc/rules_and_macros_overview.md) to -pass along information about the source files and the formatted files. - -On this page: - - * [SwiftFormatInfo](#SwiftFormatInfo) - - - - -## SwiftFormatInfo - -
-SwiftFormatInfo(format_map)
-
- -Information about the files that were formatted. - -**FIELDS** - - -| Name | Description | -| :------------- | :------------- | -| format_map | A dict where the key is the original source File and the value is the formatted File. | - - diff --git a/swiftformat/BUILD.bazel b/swiftformat/BUILD.bazel index 4ac552d..8939989 100644 --- a/swiftformat/BUILD.bazel +++ b/swiftformat/BUILD.bazel @@ -32,7 +32,6 @@ bzl_library( name = "swiftformat", srcs = ["swiftformat.bzl"], deps = [ - "//swiftformat/internal:providers", "//swiftformat/internal:src_utils", "//swiftformat/internal:swiftformat_binary", "//swiftformat/internal:swiftformat_format", diff --git a/swiftformat/internal/BUILD.bazel b/swiftformat/internal/BUILD.bazel index ac651c8..5cc1cdc 100644 --- a/swiftformat/internal/BUILD.bazel +++ b/swiftformat/internal/BUILD.bazel @@ -9,11 +9,6 @@ bzlformat_pkg( update_visibility = ["//:__subpackages__"], ) -bzl_library( - name = "providers", - srcs = ["providers.bzl"], -) - bzl_library( name = "src_utils", srcs = ["src_utils.bzl"], @@ -23,7 +18,6 @@ bzl_library( name = "swiftformat_format", srcs = ["swiftformat_format.bzl"], deps = [ - ":providers", "@bazel_skylib//lib:paths", "@cgrindel_bazel_starlib//updatesrc:defs", ], diff --git a/swiftformat/internal/providers.bzl b/swiftformat/internal/providers.bzl deleted file mode 100644 index b2b6c83..0000000 --- a/swiftformat/internal/providers.bzl +++ /dev/null @@ -1,9 +0,0 @@ -SwiftFormatInfo = provider( - doc = "Information about the files that were formatted.", - fields = { - "format_map": """\ -A `dict` where the key is the original source `File` and the value is the \ -formatted `File`.\ -""", - }, -) diff --git a/swiftformat/swiftformat.bzl b/swiftformat/swiftformat.bzl index ae26ccc..35d9f32 100644 --- a/swiftformat/swiftformat.bzl +++ b/swiftformat/swiftformat.bzl @@ -6,10 +6,6 @@ load( "//swiftformat/internal:swiftformat_format.bzl", _swiftformat_format = "swiftformat_format", ) -load( - "//swiftformat/internal:providers.bzl", - _SwiftFormatInfo = "SwiftFormatInfo", -) load( "//swiftformat/internal:swiftformat_library.bzl", _swiftformat_library = "swiftformat_library", @@ -36,8 +32,5 @@ swiftformat_test = _swiftformat_test # Rules swiftformat_format = _swiftformat_format -# Providers -SwiftFormatInfo = _SwiftFormatInfo - # APIs src_utils = _src_utils From 1aaec822a4753171e2a43e831628faca15931bdc Mon Sep 17 00:00:00 2001 From: Chuck Grindel Date: Wed, 12 Jan 2022 10:17:40 -0700 Subject: [PATCH 8/8] Updated to rules_spm 0.7.0. --- swiftformat/deps.bzl | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/swiftformat/deps.bzl b/swiftformat/deps.bzl index ea62a8d..91aaa72 100644 --- a/swiftformat/deps.bzl +++ b/swiftformat/deps.bzl @@ -22,20 +22,14 @@ def swiftformat_rules_dependencies(): ], ) - # TODO: FIX ME - - # maybe( - # http_archive, - # name = "cgrindel_rules_spm", - # sha256 = "fab28a41793744f3944ad2606cdd9c0f8e2f4861dd29fb1d61aa4263c7a1400a", - # strip_prefix = "rules_spm-0.6.0", - # urls = ["https://github.com/cgrindel/rules_spm/archive/v0.6.0.tar.gz"], - # ) - maybe( - native.local_repository, + http_archive, name = "cgrindel_rules_spm", - path = "/Users/chuck/code/cgrindel/rules_spm", + sha256 = "cbe5d5dccdc8d5aa300e1538c4214f44a1266895d9817e8279a9335bcbee2f1e", + strip_prefix = "rules_spm-0.7.0", + urls = [ + "http://github.com/cgrindel/rules_spm/archive/v0.7.0.tar.gz", + ], ) maybe(