rolint


Namerolint JSON
Version 0.1.2 PyPI version JSON
download
home_pageNone
SummaryRoLint - A multi-language linter for safe robotic software development (C, C++, Python)
upload_time2025-07-31 02:44:39
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
keywords linter robotics static-analysis c cpp python
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # RoLint Compliance Checker And Linter

<p align="center">
 <img width="300" height="500" alt="Rolint_Logo" src="https://github.com/user-attachments/assets/318bd375-e821-4a63-91ef-9e9a4cf12fde" />
</p>


RoLint is designed to be a robust and strict linter for robotics / embedded systems. It was originally developed for the Humanoid Robot Project at Worcester Polytechnic Institute.
This Linter is designed with MIRSA-C, MIRSA-C++, PEP8, and The Power Of 10 Standards in mind. Below is how to install and use RoLint, as well as an overview of the rules for the linter.

## Installation of RoLint

RoLint is registtered on PyPi, and you can install it with  

 > **pip install rolint**

This will install the RoLint linter.
Additionally, you can install by cloning the github for the project at https://github.com/MaceTheWindu66/RoLint

## How to Use RoLint

RoLint is extremely simple to use. There are 2 "commands" of RoLint:

> rolint check [OPTIONS] path/to/code.c  <-- To specify specific language or output types   
> rolint directory/  <--- Will run with default settings (text output, file's language) on all files in path.

For C/C++, RoLint is to be ran on an uncompiled C/C++ file. RoLint is not built to run off of C/C++ binaries, however their text files. RoLint should be used in conjunction with a compiler for most effective results. The rules for common compilers and this linter have overlap, but cover slightly different areas. 

### Options for Check Command

When linting a specific file using the check command, options must be defined. These options define the language and output. 

> #### Options:
> 
> > --lang c | cpp | python  
> > --output text | json  
>
> #### Examples:
> >
> > rolint check --lang c --output text main.c  

## Ignore/Override Features

RoLint comes with an override feature built in for all 3 languages.  
> " rolint: ignore" <-- Ignores the next line  
> " rolint: ignore-block" <-- Ignores a code block

For example, RoLint will ignore a for loop, and all of the code inside of the for loop, if rolint: ignore-block is commented immediately before the loop.  

### C/C++:  
> "// rolint: ignore"  
> "// rolint: ignore-block"  
### Python:  
> "## rolint: ignore"  
> "## rolint: ignore-block"  

## Overview of Rules

There are a lot of rules spanning over the 3 separate languages used for the original project that ROLINT was created for. These rules are primarily
based on MIRSA C/C++, The Power of 10, and PEP8 Standards.

### C Rules  
1. Certain unsafe standard library functions are banned to ensure safe memory operations. The current list is:
> gets, printf, fprintf, sprintf, vsprintf, strcpy, strncpy, strcat, strncat, scanf, sscanf, fscanf, strtok, atoi, atol, atof, atoll, setjmp, longjmp, malloc, calloc, free, realloc  
2. Only one variable can be declared per line.
3. Variables must be initialized when declared.
> int x; **<-- NOT ALLOWED**  
> int x = 5; **<-- ALLOWED**
4. Variables MUST be used if declared.
5. No global variables
6. Side effects are not permitted inside function calls
> EXAMPLE: printf(x++) **<-- NOT ALLOWED**  
7. No function-like macro definitions.
8. No implicit conversions in variable declarations or assignments
> int x = 3.14 **<-- NOT ALLOWED**
9. No narrowing casts
> Casting floats to ints, ints to shorts, etc.
10. No casting between pointer and arithmetic types
11. No recursion.
12. No break/continue statements in a switch statement (unless in a for loop).
13. Switch statements must have a default case.
14. No goto calls or unchecked jumps.
15. Header files must be guarded with an #ifndef statement.
16. Object definitions in header files are not permitted.

### C++ Rules
1. Unsafe standard library functions are banned, similar to C. Here is a list of the banned functions for C++:  
> malloc, calloc, realloc, free,
        printf, sprintf, scanf, gets, fgets,
        rand, srand, time, clock, gettimeofday,
        system, fork, exec, exit,
        va_start, va_arg, va_end,
        cin, cout, cerr, delete, new
2. Switch statements cannot have implicit fallthroughs (use break or [[fallthrough]])
3. Switch statements must have default statements
4. No continue statements
5. No uncontrolled jump statements, including goto
6. No function like macros

### Python Rules  
1. Code must follow PEP8 standards (flake8 used for PEP8 compliance checking).
2. All variables must be declared with static type hints.
  > x : int = 5
3. All functions must have a return annotation.  
> def func() -> int:
4. All function parameters must have static type hints.
> def func(x:int) -> int:
5. Certain inherently unsafe python functions (with regards to external code execution) are banned. The current list is:
> eval, exec, pickles
6. Threads used from python threading module must be joined.
7. Subprocesses must have a termination, wait, or communicate call to prevent zombie processes.





            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "rolint",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "linter, robotics, static-analysis, c, cpp, python",
    "author": null,
    "author_email": "Maddux Berry <madduxberry31@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/0a/68/c15c7133c4d7d04c0f804eb112684621ec27eb9894b1cf0637e9636f6986/rolint-0.1.2.tar.gz",
    "platform": null,
    "description": "# RoLint Compliance Checker And Linter\r\n\r\n<p align=\"center\">\r\n <img width=\"300\" height=\"500\" alt=\"Rolint_Logo\" src=\"https://github.com/user-attachments/assets/318bd375-e821-4a63-91ef-9e9a4cf12fde\" />\r\n</p>\r\n\r\n\r\nRoLint is designed to be a robust and strict linter for robotics / embedded systems. It was originally developed for the Humanoid Robot Project at Worcester Polytechnic Institute.\r\nThis Linter is designed with MIRSA-C, MIRSA-C++, PEP8, and The Power Of 10 Standards in mind. Below is how to install and use RoLint, as well as an overview of the rules for the linter.\r\n\r\n## Installation of RoLint\r\n\r\nRoLint is registtered on PyPi, and you can install it with  \r\n\r\n > **pip install rolint**\r\n\r\nThis will install the RoLint linter.\r\nAdditionally, you can install by cloning the github for the project at https://github.com/MaceTheWindu66/RoLint\r\n\r\n## How to Use RoLint\r\n\r\nRoLint is extremely simple to use. There are 2 \"commands\" of RoLint:\r\n\r\n> rolint check [OPTIONS] path/to/code.c  <-- To specify specific language or output types   \r\n> rolint directory/  <--- Will run with default settings (text output, file's language) on all files in path.\r\n\r\nFor C/C++, RoLint is to be ran on an uncompiled C/C++ file. RoLint is not built to run off of C/C++ binaries, however their text files. RoLint should be used in conjunction with a compiler for most effective results. The rules for common compilers and this linter have overlap, but cover slightly different areas. \r\n\r\n### Options for Check Command\r\n\r\nWhen linting a specific file using the check command, options must be defined. These options define the language and output. \r\n\r\n> #### Options:\r\n> \r\n> > --lang c | cpp | python  \r\n> > --output text | json  \r\n>\r\n> #### Examples:\r\n> >\r\n> > rolint check --lang c --output text main.c  \r\n\r\n## Ignore/Override Features\r\n\r\nRoLint comes with an override feature built in for all 3 languages.  \r\n> \" rolint: ignore\" <-- Ignores the next line  \r\n> \" rolint: ignore-block\" <-- Ignores a code block\r\n\r\nFor example, RoLint will ignore a for loop, and all of the code inside of the for loop, if rolint: ignore-block is commented immediately before the loop.  \r\n\r\n### C/C++:  \r\n> \"// rolint: ignore\"  \r\n> \"// rolint: ignore-block\"  \r\n### Python:  \r\n> \"## rolint: ignore\"  \r\n> \"## rolint: ignore-block\"  \r\n\r\n## Overview of Rules\r\n\r\nThere are a lot of rules spanning over the 3 separate languages used for the original project that ROLINT was created for. These rules are primarily\r\nbased on MIRSA C/C++, The Power of 10, and PEP8 Standards.\r\n\r\n### C Rules  \r\n1. Certain unsafe standard library functions are banned to ensure safe memory operations. The current list is:\r\n> gets, printf, fprintf, sprintf, vsprintf, strcpy, strncpy, strcat, strncat, scanf, sscanf, fscanf, strtok, atoi, atol, atof, atoll, setjmp, longjmp, malloc, calloc, free, realloc  \r\n2. Only one variable can be declared per line.\r\n3. Variables must be initialized when declared.\r\n> int x; **<-- NOT ALLOWED**  \r\n> int x = 5; **<-- ALLOWED**\r\n4. Variables MUST be used if declared.\r\n5. No global variables\r\n6. Side effects are not permitted inside function calls\r\n> EXAMPLE: printf(x++) **<-- NOT ALLOWED**  \r\n7. No function-like macro definitions.\r\n8. No implicit conversions in variable declarations or assignments\r\n> int x = 3.14 **<-- NOT ALLOWED**\r\n9. No narrowing casts\r\n> Casting floats to ints, ints to shorts, etc.\r\n10. No casting between pointer and arithmetic types\r\n11. No recursion.\r\n12. No break/continue statements in a switch statement (unless in a for loop).\r\n13. Switch statements must have a default case.\r\n14. No goto calls or unchecked jumps.\r\n15. Header files must be guarded with an #ifndef statement.\r\n16. Object definitions in header files are not permitted.\r\n\r\n### C++ Rules\r\n1. Unsafe standard library functions are banned, similar to C. Here is a list of the banned functions for C++:  \r\n> malloc, calloc, realloc, free,\r\n        printf, sprintf, scanf, gets, fgets,\r\n        rand, srand, time, clock, gettimeofday,\r\n        system, fork, exec, exit,\r\n        va_start, va_arg, va_end,\r\n        cin, cout, cerr, delete, new\r\n2. Switch statements cannot have implicit fallthroughs (use break or [[fallthrough]])\r\n3. Switch statements must have default statements\r\n4. No continue statements\r\n5. No uncontrolled jump statements, including goto\r\n6. No function like macros\r\n\r\n### Python Rules  \r\n1. Code must follow PEP8 standards (flake8 used for PEP8 compliance checking).\r\n2. All variables must be declared with static type hints.\r\n  > x : int = 5\r\n3. All functions must have a return annotation.  \r\n> def func() -> int:\r\n4. All function parameters must have static type hints.\r\n> def func(x:int) -> int:\r\n5. Certain inherently unsafe python functions (with regards to external code execution) are banned. The current list is:\r\n> eval, exec, pickles\r\n6. Threads used from python threading module must be joined.\r\n7. Subprocesses must have a termination, wait, or communicate call to prevent zombie processes.\r\n\r\n\r\n\r\n\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "RoLint - A multi-language linter for safe robotic software development (C, C++, Python)",
    "version": "0.1.2",
    "project_urls": null,
    "split_keywords": [
        "linter",
        " robotics",
        " static-analysis",
        " c",
        " cpp",
        " python"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8d71eaf85e694719856fbcf0162985145795f4cffa46c7aa8050323c5eec175c",
                "md5": "d9559b03be10c45b02ca6c7e42360f9a",
                "sha256": "c1fde57b4f531ed506e4ad72e15e5a2a4b8c4e11099d6ef6a512e0711ba794ef"
            },
            "downloads": -1,
            "filename": "rolint-0.1.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d9559b03be10c45b02ca6c7e42360f9a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 21183,
            "upload_time": "2025-07-31T02:44:37",
            "upload_time_iso_8601": "2025-07-31T02:44:37.877284Z",
            "url": "https://files.pythonhosted.org/packages/8d/71/eaf85e694719856fbcf0162985145795f4cffa46c7aa8050323c5eec175c/rolint-0.1.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0a68c15c7133c4d7d04c0f804eb112684621ec27eb9894b1cf0637e9636f6986",
                "md5": "1ab3aa490ca4110fb9bf92920fa9849d",
                "sha256": "9ac8f06dd9dacd4bf8837c0e18f8254dd45e70d661f6bb63b4c05d02d66d2bf8"
            },
            "downloads": -1,
            "filename": "rolint-0.1.2.tar.gz",
            "has_sig": false,
            "md5_digest": "1ab3aa490ca4110fb9bf92920fa9849d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 19877,
            "upload_time": "2025-07-31T02:44:39",
            "upload_time_iso_8601": "2025-07-31T02:44:39.078865Z",
            "url": "https://files.pythonhosted.org/packages/0a/68/c15c7133c4d7d04c0f804eb112684621ec27eb9894b1cf0637e9636f6986/rolint-0.1.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-31 02:44:39",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "rolint"
}
        
Elapsed time: 1.32260s