Git Product home page Git Product logo

tagliatelle's Introduction

Tagliatelle

Sponsor Build Status

A linter that handles struct tags.

Supported string casing:

Source Camel Case Go Camel Case
GooID gooId gooID
HTTPStatusCode httpStatusCode httpStatusCode
FooBAR fooBar fooBar
URL url url
ID id id
hostIP hostIp hostIP
JSON json json
JSONName jsonName jsonName
NameJSON nameJson nameJSON
UneTête uneTête uneTête
Source Pascal Case Go Pascal Case
GooID GooId GooID
HTTPStatusCode HttpStatusCode HTTPStatusCode
FooBAR FooBar FooBar
URL Url URL
ID Id ID
hostIP HostIp HostIP
JSON Json JSON
JSONName JsonName JSONName
NameJSON NameJson NameJSON
UneTête UneTête UneTête
Source Snake Case Upper Snake Case Go Snake Case
GooID goo_id GOO_ID goo_ID
HTTPStatusCode http_status_code HTTP_STATUS_CODE HTTP_status_code
FooBAR foo_bar FOO_BAR foo_bar
URL url URL URL
ID id ID ID
hostIP host_ip HOST_IP host_IP
JSON json JSON JSON
JSONName json_name JSON_NAME JSON_name
NameJSON name_json NAME_JSON name_JSON
UneTête une_tête UNE_TÊTE une_tête
Source Kebab Case Go KebabCase
GooID goo-id goo-ID
HTTPStatusCode http-status-code HTTP-status-code
FooBAR foo-bar foo-bar
URL url URL
ID id ID
hostIP host-ip host-IP
JSON json JSON
JSONName json-name JSON-name
NameJSON name-json name-JSON
UneTête une-tête une-tête
Source Header Case
GooID Goo-Id
HTTPStatusCode Http-Status-Code
FooBAR Foo-Bar
URL Url
ID Id
hostIP Host-Ip
JSON Json
JSONName Json-Name
NameJSON Name-Json
UneTête Une-Tête

Examples

// json and camel case
type Foo struct {
    ID     string `json:"ID"` // must be "id"
    UserID string `json:"UserID"`// must be "userId"
    Name   string `json:"name"`
    Value  string `json:"val,omitempty"`// must be "value"
}

What this tool is about

This tool is about validating tags according to rules you define. The tool also allows to fix tags according to the rules you defined.

This tool is not intended to validate the fact a tag in valid or not. To do that, you can use go vet, or use golangci-lint "go vet" linter.

How to use the tool

As a golangci-lint linter

Define the rules, you want via your golangci-lint configuration file:

linters-settings:
  tagliatelle:
    # Check the struck tag name case.
    case:
      # Use the struct field name to check the name of the struct tag.
      # Default: false
      use-field-name: true
      rules:
        # Any struct tag type can be used.
        # Support string case: `camel`, `pascal`, `kebab`, `snake`, `upperSnake`, `goCamel`, `goPascal`, `goKebab`, `goSnake`, `upper`, `lower`, `header`.
        json: camel
        yaml: camel
        xml: camel

More information here https://golangci-lint.run/usage/linters/#tagliatelle

Install and run it from the binary

Not recommended.

go install github.com/ldez/tagliatelle/cmd/tagliatelle@latest

then launch it manually.

Rules

Here are the default rules for the well known and used tags, when using tagliatelle as a binary or golangci-lint linter:

  • json: camel
  • yaml: camel
  • xml: camel
  • bson: camel
  • avro: snake
  • header: header
  • env: upperSnake
  • envconfig: upperSnake

Custom Rules

The tool is not limited to the tags used in example, you can use it to validate any tag.

You can add your own tag, for example whatever and tells the tool you want to use kebab.

This option is only available via golangci-lint.

linters-settings:
  tagliatelle:
    # Check the struck tag name case.
    case:
      # Use the struct field name to check the name of the struct tag.
      # Default: false
      use-field-name: true
      rules:
        # Any struct tag type can be used.
        # Support string case: `camel`, `pascal`, `kebab`, `snake`, `goCamel`, `goPascal`, `goKebab`, `goSnake`, `upper`, `lower`
        json:     camel
        yaml:     camel
        xml:      camel
        whatever: kebab

tagliatelle's People

Contributors

abemedia avatar ccoveille avatar ldez avatar pd93 avatar silverlyra avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.