diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1dbf0f54f..d51ca9c32 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -134,6 +134,9 @@ jobs: - name: check go modules tidiness run: make tidy-module-check + - name: lint proto files + run: make protolint + - name: lint run: GOGC=50 make lint diff --git a/.protolint.yaml b/.protolint.yaml new file mode 100644 index 000000000..269d74a73 --- /dev/null +++ b/.protolint.yaml @@ -0,0 +1,70 @@ +# The example configuration file for the protolint is located here: +# https://github.com/yoheimuta/protolint/blob/master/_example/config/.protolint.yaml +--- +# Lint directives. +lint: + # Linter rules. + # Run `protolint list` to see all available rules. + rules: + # Determines whether or not to include the default set of linters. + no_default: true + + # Set the default to all linters. This option works the other way around as no_default does. + # If you want to enable this option, delete the comment out below and no_default. + # all_default: true. + + # The specific linters to add. + add: + - MESSAGE_NAMES_UPPER_CAMEL_CASE + - MAX_LINE_LENGTH + - INDENT + - FILE_NAMES_LOWER_SNAKE_CASE + - IMPORTS_SORTED + - PACKAGE_NAME_LOWER_CASE + - ORDER + - SERVICES_HAVE_COMMENT + - RPCS_HAVE_COMMENT + - PROTO3_FIELDS_AVOID_REQUIRED + - PROTO3_GROUPS_AVOID + - SYNTAX_CONSISTENT + - RPC_NAMES_CASE + - QUOTE_CONSISTENT + + # Linter rules option. + rules_option: + # MAX_LINE_LENGTH rule option. + max_line_length: + # Enforces a maximum line length. + max_chars: 80 + # Specifies the character count for tab characters. + tab_chars: 2 + + # INDENT rule option. + indent: + # Available styles are 4(4-spaces), 2(2-spaces) or tab. + style: 4 + # Specifies if it should stop considering and inserting new lines at the appropriate positions. + # when the inner elements are on the same line. Default is false. + not_insert_newline: true + + # QUOTE_CONSISTENT rule option. + quote_consistent: + # Available quote are "double" or "single". + quote: double + + # ENUM_FIELD_NAMES_ZERO_VALUE_END_WITH rule option. + enum_field_names_zero_value_end_with: + suffix: INVALID + + # SERVICE_NAMES_END_WITH rule option. + service_names_end_with: + text: Service + + # REPEATED_FIELD_NAMES_PLURALIZED rule option. + ## The spec for each rules follows the implementation of https://github.com/gertd/go-pluralize. + ## Plus, you can refer to this rule's test code. + repeated_field_names_pluralized: + uncountable_rules: + - paper + irregular_rules: + Irregular: Regular diff --git a/Makefile b/Makefile index dab39451f..c4829bf1b 100644 --- a/Makefile +++ b/Makefile @@ -280,6 +280,11 @@ lint: docker-tools @$(call print, "Linting source.") $(DOCKER_TOOLS) golangci-lint run -v $(LINT_WORKERS) +#? protolint: Lint proto files using protolint +protolint: + @$(call print, "Linting proto files.") + docker run --rm --volume "$$(pwd):/workspace" --workdir /workspace yoheimuta/protolint lint lnrpc/ + #? tidy-module: Run `go mod` tidy for all modules tidy-module: echo "Running 'go mod tidy' for all modules" diff --git a/lnrpc/devrpc/dev.proto b/lnrpc/devrpc/dev.proto index 2a43d7490..502fbadc8 100644 --- a/lnrpc/devrpc/dev.proto +++ b/lnrpc/devrpc/dev.proto @@ -1,9 +1,9 @@ syntax = "proto3"; -import "lightning.proto"; - package devrpc; +import "lightning.proto"; + option go_package = "github.com/lightningnetwork/lnd/lnrpc/devrpc"; /* diff --git a/lnrpc/invoicesrpc/invoices.proto b/lnrpc/invoicesrpc/invoices.proto index db9907a60..441f668d2 100644 --- a/lnrpc/invoicesrpc/invoices.proto +++ b/lnrpc/invoicesrpc/invoices.proto @@ -1,9 +1,9 @@ syntax = "proto3"; -import "lightning.proto"; - package invoicesrpc; +import "lightning.proto"; + option go_package = "github.com/lightningnetwork/lnd/lnrpc/invoicesrpc"; /* diff --git a/lnrpc/lnclipb/lncli.proto b/lnrpc/lnclipb/lncli.proto index 981dc25c3..8118c0590 100644 --- a/lnrpc/lnclipb/lncli.proto +++ b/lnrpc/lnclipb/lncli.proto @@ -1,9 +1,9 @@ syntax = "proto3"; -import "verrpc/verrpc.proto"; - package lnclipb; +import "verrpc/verrpc.proto"; + option go_package = "github.com/lightningnetwork/lnd/lnrpc/lnclipb"; message VersionResponse { diff --git a/lnrpc/peersrpc/peers.proto b/lnrpc/peersrpc/peers.proto index 4cfdab5fd..9e6ac84fc 100644 --- a/lnrpc/peersrpc/peers.proto +++ b/lnrpc/peersrpc/peers.proto @@ -1,9 +1,9 @@ syntax = "proto3"; -import "lightning.proto"; - package peersrpc; +import "lightning.proto"; + option go_package = "github.com/lightningnetwork/lnd/lnrpc/peersrpc"; // Peers is a service that can be used to get information and interact diff --git a/lnrpc/routerrpc/router.proto b/lnrpc/routerrpc/router.proto index 02ca7244c..418a8c1a7 100644 --- a/lnrpc/routerrpc/router.proto +++ b/lnrpc/routerrpc/router.proto @@ -1,9 +1,9 @@ syntax = "proto3"; -import "lightning.proto"; - package routerrpc; +import "lightning.proto"; + option go_package = "github.com/lightningnetwork/lnd/lnrpc/routerrpc"; /* diff --git a/lnrpc/walletrpc/walletkit.proto b/lnrpc/walletrpc/walletkit.proto index ac0ea69ae..17ba25141 100644 --- a/lnrpc/walletrpc/walletkit.proto +++ b/lnrpc/walletrpc/walletkit.proto @@ -1,10 +1,10 @@ syntax = "proto3"; +package walletrpc; + import "lightning.proto"; import "signrpc/signer.proto"; -package walletrpc; - option go_package = "github.com/lightningnetwork/lnd/lnrpc/walletrpc"; /* diff --git a/lnrpc/walletunlocker.proto b/lnrpc/walletunlocker.proto index faf3c0892..f1375d450 100644 --- a/lnrpc/walletunlocker.proto +++ b/lnrpc/walletunlocker.proto @@ -1,9 +1,9 @@ syntax = "proto3"; -import "lightning.proto"; - package lnrpc; +import "lightning.proto"; + option go_package = "github.com/lightningnetwork/lnd/lnrpc"; /*