Skip to content

CustomEntity/crNormz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

128 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


logo
crNormz

The most awesome norminette made using Crystal.

APM GitHub issues Discord GitHub release

Project DescriptionInstallationHow to useFeaturesBenchmarksCredits

project.gif

Project Description

crNormz is a norm checking program developed using Crystal so that students can check for compliance with the EPITECH standard. This linter is currently the fastest, most reliable and most accurate, see Benchmarks

Installation

To clone and run this application, you'll need Git installed on your computer. From your command line:

# Clone this repository
$ git clone https://github.com/CustomEntity/crNormz

# Go into the repository
$ cd crNormz

# Install the norminette
$ sudo ./crnormz_installer.sh

How to use

# Show help
$ crnormz -h

Usage: crnormz [-fgtlh]
    -f, --ignore-file=               Ignore file from the checker
    -g, --ignore-function=           Ignore forbidden functions
    -t, --ignore-type=               Ignore errors of a specific type
    -l, --ignore-level=              Ignore errors of a specific level (Major, Minor or Info)
    -r, --raw-output                 Enables easy parsing for applications
    -h, --help                       Show this help

# Run the norminette
$ crnormz

# Run the norminette excludind all .o files
$ crnormz -f "*.o"

# Run the norminette without checking the forbidden functions (printf and scanf)
$ crnormz -g "printf,scanf"

# Run the norminette excluding all O1 rules
$ crnormz -t "O1"

# Run the norminette excluding all info level rules
$ crnormz -l "info"

# Sort files alphabetically
$ crnormz -s

# Run the norminette without text formatting
$ crnormz -r

Features

⚠️ crNormz does not support comments and quotes at the moment

Type Description State
Image O1 Useless file for compilation
Image O2 Invalid .c file source code 🔨
Image O3 Too many functions in a file (> 5 functions)
Image O4 File name not in snake_case
Image G1 EPITECH header not found or invalid
Image G2 Functions must be separated by a single line
Image G3 Preprocessor directives must be indented according to the level of indirection
Image G4 Global variable not constant 🔨
Image G5 Static global variables and functions 🔨
Image G6 Include directive should only include header .h files
Image G7 Line endings must be done in UNIX style (with \n)
Image G8 No trailing spaces must be present at the end of a line
Image G9 No more than 1 trailing empty line must be present
Image F2 Function name not in snake_case
Image F3 Too many columns (> 80 columns)
Image F4 Too many lines in function (> 20 lines)
Image F5 Too many parameters in function (> 4 parameters)
Image F5 Missing 'void' parameter in case of function without arguments
Image F6 Comments within a function
Image F7 Nested functions 🔨
Image L1 Multiple assignments on the same line
Image L2 Bad indentation
Image L3 Missing space after a keyword 🔨
Image L4 Misplaced bracket
Image L6 Line jumps
Image V1 The type names defined with typedef should end with _t
Image V1 All identifier names should be according to the snake_case convention
Image V1 The names of macros should be written in UPPER_CASE
Image V1 The content of enums should be written in UPPER_CASE
Image V3 Pointer badly positioned
Image C1 Too much code depth (> 2 levels)
Image C3 Goto keyword
Image H1 Source code in header file vice versa
Image H3 Macro should match only one statement
Image A3 File should end with a line break
Image Forbidden function 🔨

Benchmarks

These benchmarks were performed on a project in real use with 225 source files, 30 header files and 1 Makefile.

Norminette Time, s Major Minor Info
Epitech National N/A 473 59 49
👑 crNormz 0.550 481 84 49
Abricot 7.302 99 228 48
JankunNorme 1.274 259 209 48
Bubulle 10.763 27 22 49

Credits