Skip to content
This repository

Outlaw helps you enforce your opinions to keep bad code out your projects. Personal project for Mendicant University S10

branch: special_case_a…

This branch is 1 commit ahead and 36 commits behind master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 bin
Octocat-spinner-32 data We should move our data/assets into their own folders to keep the January 24, 2012
Octocat-spinner-32 examples
Octocat-spinner-32 lib
Octocat-spinner-32 test
Octocat-spinner-32 .gitignore Standardize to a single example config file and ignore out config January 24, 2012
Octocat-spinner-32 Gemfile gemspec and MIT license January 24, 2012
Octocat-spinner-32 LICENSE gemspec and MIT license January 24, 2012
Octocat-spinner-32 README.md
Octocat-spinner-32 Rakefile
Octocat-spinner-32 outlaw.gemspec
README.md

Outlaw

Keep bad code out of your projects. Your idea of bad code, no one elses.

NOTE: Outlaw can evaluate any version ruby code, BUT it runs on only 1.9 -- set your system ruby to 1.9 to use

Part of MendicantUniversity.org S10 class, personal project.

From the included .outlawed.example file for custom rule definition:

  outlaw "@@",                "Class variables are evil"
  outlaw "protected",         "use private or public, protected is silly in ruby"
  outlaw "module :token end", "nest modules to avoid empty module declarations"
  outlaw "eval",              "never eval, rarely class_eval or instance_eval, but never eval"

Execute outlaw on your project from the root directory by simply entering "outlaw", or specify another directory to run on with "outlaw /path/to/dir"

Before using outlaw in a project you should create a .outlawed file which Outlaw will read laws from. It comes with an example file (.outlawed.example) which is included in the gem and will be loaded if no .outlawed file is found in current directory or home directory, and will warn you to provide a real file (and provide location of the sample file in your system from the gem installation).

Syntax for DSL:

A defined collection exists for core classes, such that

outlaw "class :symbol < :core_class",
                          "core classes implemented in c, can cause bad mojo"

will outlaw subclassing from any core class

Users can create defined collections like :core_class by creating new constants called, e.g. CORE_CLASS within the "module Outlaw" namespace which are defined as arrays of string names to match in example code the same way :core_class is used above.

Planned features (unimplemented):

*Customize sensitivty , for instance whitespace is currently ignored, but could enforce style conventions with some whitespace sensitive laws. Also ignores parens, which might be required or prohibited in some context. *Specify AST-nodes of interest, and within them allow arbitrary amounts of code with a :disjoint_code_seperator token.

This should allow, for instance, something like the following, which is not currently possible to outlaw in a useful way:

outlaw ":conditional_branch unless :disjoint_code_seperator else", "If you write unless else and think it makes sense then you are a cylon"

*Integrate Rails Best Practices gem, Reek gem, and perhaps others, so that individual issue detections they provide can be added as laws in the outlawed file while ignoring/not running other detection routines.

*Automate optional integration with rake task and/or githooks for enforcement/notification of laws in a project.

*Specify classes of laws, such as log, warn and prevent for differing behavior regarding violations at runtime.

Something went wrong with that request. Please try again.