Coder Social home page Coder Social logo

loco's Introduction

"Logo"

Loco

Loco is an extremly fast CLI linter for Localization.strings and swift files.

What does it check?

  • Semicolons

  • Untranslated strings in your swift files

  • Empty values

  • Duplicate keys

  • Unused keys

  • Missing keys in one or more languages

  • Missing a translation file for a whole language

  • Works with swiftgen generated localizations.

New features:

  • Doesnt lint empty strings inside normally checked objects.
  • It doesnt check commented out strings that normally would be checked (Single line comments.)

Output format

  • Loco will output its result in a compiler error log format so it can easily be integrated in third party apps (like Xcode, Emacs, Vim)
Limitation
  • Loco builds two separate sets of data for each source file, one is for known localization pattern, such as NSLocalizedString, etc. The other one is for all the strings. Loco will then check if any of those are in a .strings file for silent warnings about unused translation keys. But it wont discover if a such key is untranslated.
  • Does not lint Localization.dict
  • Does not lint Storyboards
  • Will have false positive / true negatives
  • Needs a bit code clean up. (imperative coding mixed with tons of functional. Sorry purists)
  • Only some unit tests (more will come)

Installation

Compile the project using terminal (or Xcode)

Release
swift build -c release
Debug
swift build

Copy the loco binary from either .build/release or .build/debug to

/usr/local/bin

How to use

Integrate with Xcode

"Xcode"

In build phases. Add run script (+)

if which loco > /dev/null; then
	loco
else 
	echo "warning: Loco is not installed. Compile from https://github.com/konrad1977/loco"
fi

Make sure you run loco before compile sources to get info where you are missing a semicolon

From terminal

Just run loco from your project root.

$ loco

Arguments

Lint individual swift files (check for missing translations only)

$ loco -f "/myProject/Sources/Subfolder/somefile.swift"

Enable colored output

$ loco --color

With color "Example2"

Without color "Example"

loco's People

Contributors

kirchberg avatar konrad1977 avatar max-potapov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Forkers

day-job kirchberg

loco's Issues

Custom Localised Strings pattern

Hi @konrad1977
Creating a separate issue

I did update to the latest version. It doesn't coght all the strings for me.
I was able to fix this by altering the RegexPattern file like this:

   static var sourceRegex: String {
        buildSourceRegex(
          [
            "\\.navigationTitle",
            "Label",
            "DatePicker",
            "Text",
            "Picker",
            "Button",
            "Toggle",
            "LocalizedStringKey",
            "NSLocalizedString",
            "String\\(localized:",
            "MyLocalizedString\\(",
          ]
        )
    }

also, I was trying to add a reg exps but failed for now for such cases:
let arrayOfLocalizedKeys = ["key_1", "key_2"];
let key = resourceAvailable ? "key_1" : "key_2";
enum States: String {
case online = "online_key"
case offline = "ofline_key"
}

or maybe there is a way to suppress individual strings.

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.