Robocop is a tool that performs static code analysis of Robot Framework code.

Unit-tests Codecov PyPI Python versions Licence Downloads


Robocop

Watch our talk from RoboCon 2021 about Robocop and Robotidy and learn more about these cool tools! ๐Ÿค–

Robocop & Robotidy presentation at RoboCon 2021


Introduction

Robocop is a tool that performs static code analysis of Robot Framework code.

It uses official Robot Framework parsing API to parse files and run number of checks, looking for potential errors or violations to code quality standards.

Hosted on GitHub. ๐ŸŽ–๏ธ

Documentation

Full documentation available here. ๐Ÿ“–

Most common questions with answers can be found at the bottom โฌ‡ of this README file.

Values

Original RoboCop - a fictional cybernetic police officer ๐Ÿ‘ฎโ€โ™‚๏ธ - was following 3 prime directives which also drive the progress of Robocop linter:

First Directive: Serve the public trust ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ

Which lies behind the creation of the project - to serve developers and testers as a tool to build applications they can trust.

Second Directive: Protect the innocent ๐Ÿ‘ถ

The innocent testers and developers have no intention to produce ugly code but sometimes, you know, it just happens, so Robocop is there to protect them.

Third Directive: Uphold the law ๐Ÿ›๏ธ

Following the coding guidelines established in the project are something very important to keep the code clean, readable and understandable by others and Robocop can help to uphold the law.

Requirements

Python 3.6+ ๐Ÿ and Robot Framework 3.2.2+ ๐Ÿค– .

Installation

You can install latest version of Robocop simply by running::

pip install -U robotframework-robocop

Usage

Robocop runs by default from the current directory and it discovers supported files recursively. You can simply run::

robocop

All command line options can be displayed in help message by executing::

robocop -h

Example Output

Executing command::

robocop --report rules_by_error_type tests\test.robot

Will result in following output::

C:\OCP_project\tests\test.robot:7:1 [W] 0509 Section is empty (empty-section)
C:\OCP_project\tests\test.robot:22:1 [E] 0801 Multiple test cases with name "Simple Test" in suite (duplicated-test-case)
C:\OCP_project\tests\test.robot:42:1 [E] 0810 Both Task(s) and Test Case(s) section headers defined in file (both-tests-and-tasks)
C:\OCP_project\tests\test.robot:48:1 [W] 0302 Keyword name should use title case (wrong-case-in-keyword-name)
C:\OCP_project\tests\test.robot:51:13 [I] 0606 This tag is already set by Force Tags in suite settings (tag-already-set-in-force-tags)

Found 5 issue(s): 2 WARNING(s), 2 ERROR(s), 1 INFO(s).

Fixing issues

Many issues in your code reported by Robocop can be fixed using auto-formatting tool, Robotidy. Check out the Robotidy documentation.

FAQ

Can I integrate Robocop with my code editor (IDE)?

Yes, Robocop integrates nicely with popular IDEs like PyCharm or VSCode thanks to Robot Framework Language Server. Read simple manual (README) in that project to figure out how to install & use it.

You can also use Robocop in PyCharm easily as an external tool. To configure it, go to: File โ†’ Settings โ†’ Tools โ†’ External Tools and click + icon. Then put values based on official instructions or this screenshot:

Robocop

If you're using Python virtual environment in your project, make sure to provide correct path to robocop.exe located in venv\Scripts\robocop.exe. Now, you can run Robocop by right-clicking on a file or directory and choosing External tools โ†’ Robocop.

We suggest also to add a keyboard shortcut (e.g. Ctrl + , (comma)) to quickly run Robocop on selected files. You can map the shortcut in Settings โ†’ Keymap.

Can I load configuration from file?

Yes, there are multiple ways to configure Robocop:

Argument file

You can add command line options to an argument file, preferably one option with value for a line. Such file can be used as an input for Robocop with --argumentfile / -A option, e.g. robocop -A robocop.cfg. You can mix arguments from a file with ones provided in run command.

Example argument file:

--exclude *doc*
--exclude 0510
--threshold W
--configure inconsistent-assignment:assignment_sign_type:equal_sign
--configure line-too-long:line_length:140
--reports all
--output robocop.log

.robocop file

It is a default file that is loaded only when no command line options are provided for Robocop. When running plain robocop command, it looks for .robocop file from place where it was run until it finds .git file. Options can be provided like in the example above.


pyproject.toml file

If there is no .robocop file and toml module is installed, Robocop will try to load configuration from pyproject.toml file (if it exists). Options have the same names as command line arguments and need to be placed under [tool.robocop] section.

Example configuration file:

[tool.robocop]
paths = [
    "tests\\atest\\rules\\bad-indent",
    "tests\\atest\\rules\\duplicated-library"
]
include = ['W0504', '*doc*']
exclude = ["0203"]
reports = [
    "rules_by_id",
    "scan_timer"
]
ignore = ["ignore_me.robot"]
ext-rules = ["path_to_external\\dir"]
filetypes = [".txt", ".tsv"]
threshold = "E"
format = "{source}:{line}:{col} [{severity}] {rule_id} {desc} (name)"
output = "robocop.log"
configure = [
    "line-too-long:line_length:150",
    "0201:severity:E"
]
no_recursive = true
I use different coding standards. Can I configure rules so that they fit my needs?

Yes, some rules are configurable. You can list them by running robocop --list-configurables or just robocop -lc.

Configuring is done by using -c / --configure command line option followed by pattern : : where:

  • can either be rule name or its id
  • is a public name of the parameter
  • is a desired value of the parameter

For example:

--configure line-too-long:line_length:140

is equivalent to

-c 0508:line_length:140

Each rule's severity can also be overwritten. Possible values are e/error, w/warning or i/info and are case-insensitive. Example:

-c too-long-test-case:severity:e

If there are special cases in your code that violate the rules, you can also exclude them in the source code.

Example:

Keyword with lowercased name  # robocop: disable

More about it in our documentation.

Can I define custom rules?

Yes, you can define and include custom rules using -rules / --ext-rules command line option by providing a path to a file containing your rule(s). The option accepts comma-separated list of paths to files or directories, e.g.

robocop -rules my/own/rule.py --ext-rules rules.py,external_rules.py

If you feel that your rule is very helpful and should be included in Robocop permanently, you can always share your solution by submitting a pull request. You can also share your idea by creating an issue.

More about external rules with code examples in our documentation.

Can I use Robocop in continuous integration (CI) tools?

Yes, it is easy to integrate Robocop with other tools. It is possible to redirect the output to a file by using -o / --output command line option which can later be easily parsed because the format is very similar to other linter tools like pylint.

For example in Jenkins you can use Warnings Next Generation plugin to integrate Robocop results in your pipeline. More details can be found here.

One of the important topics related to CI is return code which can also be configured in Robocop. More on that can be found in the next question or in our documentation.

Can I configure return status / code?

Yes, by default Robocop returns code 0 if number of found issues does not exceed quality gates.

Quality gates are the number specified for each severity (error, warning, info) that cannot be exceeded. Every violation of quality gates increases the return code by 1 up to maximum of 255. Default values for quality gates are:

quality_gate = {
          'E': 0,
          'W': 0,
          'I': -1
      }

which shows the accepted number of issues by severity. In that case each error and warning increases the return code. Rules with INFO severity do not affect the return code.

To configure quality gates, you simply use -c / --configure command line option with following pattern --configure return_status:quality_gates: =limit . You can change all limits at once. Example:

--configure return_status:quality_gates:E=0:W=100:I=-1

which means that no errors are accepted, up to 100 warnings are tolerated and issues with INFO severity do not affect the return code.

What is the difference between Robocop and rflint?

Robocop is better in every case because it:

  • has maaaaany rules that check the quality of your Robot Framework code
  • is integrated with popular IDE tools
  • is highly configurable
  • has very good defaults that work out of the box
  • can be configured in source code
  • uses latest Robot Framework Parsing API
  • is actively developed & fixed
  • is easy to integrate with external tools
  • can redirect output to a file
  • displays nice reports
  • is easy to extend it with new rules
  • is cool ๐Ÿค“

Still not convinced? Watch our talk about Robocop & Robotidy and see for yourself! ๐Ÿง


Excuse me, I have to go. Somewhere there is a crime happening. - Robocop

Owner
marketsquare
Robot Framework Community's shared code repositories
marketsquare
Comments
  • Add client-server mode with API

    Add client-server mode with API

    Client-server mode with API could be used by IDEs or separate programs for file scanning "on the fly" without need to wrap Robocop.

    Example:

    robocop = Robocop.server(*args)
    robocop.scan_file(file)
    robocop.scan_file(file)
    ...
    robocop.scan_file(file)
    

    Returned output would need to be different than std.out (for example json object) so it would be handled by other tools.

  • Sarif support for integration with GitHub security

    Sarif support for integration with GitHub security

    Can you add Sarif export support to the export of the scans so the data can be uploaded to GitHub Advanced Security? This would give us a consolidated view of all the code quality issues.

  • configurable terms for todo-in-comment

    configurable terms for todo-in-comment

    It would be good if todo-in-comment rule has configurable terms.

    E.g. robocop --configure todo-in-comment:todos:OMG,bug also this work robocop --configure "todo-in-comment:todos:remove me,fix this ugly bug" This should enable also terms in local language.

    ~~Work in progress: documentation, tests~~

    What would be the best location to place rule configuration tests?

  • New doc theme and docs fixes

    New doc theme and docs fixes

    Closes #563

    @mnojek please check it visually - I can modify pretty much everything through custom css (spacing, padding, colours etc). I switched from rtd theme to Sphinx default alabaster theme. You can build documentation locally with:

    tox -e docs
    

    Documentation will be under docs/_build/index.html

  • Create at least one report that logs date and time of checking RF scripts

    Create at least one report that logs date and time of checking RF scripts

    When I run robocop with -o myfolder/robocop.log saving the logs at the same place, I just need to refresh the log file. But I want to be sure that the most recent robocop result is displayed.

    Currently I run Robocop with all reports and I get a log like this:

    grafik

    Wouldn't it be good to have at least one report that logs date and time when robocop was ended?

    Either as an own report or as extension of existing reports, e.g.:

    • Report generated on 2022-07-04 17:50 by Robocop version: 2.1.0,
    • Scan finished in 5.973s on 2022-07-04 17:50
  • Check indentation completely

    Check indentation completely

    I suggest to implement all-catching check of indentation. The current rules regarding indentation ([W1007] uneven-indent and [E1008] bad-indent) allow me to indent very sloppily. ๐Ÿ˜„ It could work roughly like this:

    • One level of indentation is either one tab or 4 spaces (this "4" would be default, but configurable)
    • Names of keywords and test cases in definition are not indented. Their bodies are indented by 1 level.
    • In FOR-cycles and IF-branches, stuff is indented one more level than "FOR" or "IF"
    • Continuation line has the same indentation as the line which the continuation line "extends".
    • Lines containing only comments are indented either like the preceding, or the following non-empty line.
    • (Is there any other case influencing indentation?)

    I do not know whether Robocop is ready for such a rule, but it is able to work with indentation even now, so I hope so...

  • Embedded keywords with variable are treated as not capitalised

    Embedded keywords with variable are treated as not capitalised

    Describe the bug Embedded keywords with variable are treated as not capitalised, while IMHO they are fine formatted.

    To Reproduce Run robocop against file containing following code

    *** Variables ***
    ${variable}    does not matter
    
    *** Test Cases ***
    Test Capitalised
        Embedded Keyword With ${variable}
    
    *** Keywords ***
    Embedded Keyword With ${variable}
        Log    ${variable}
    

    Results in [W] 0302 Keyword name should be capitalized message form Robocop

    Expected behavior Since common approach to variables is to have them lowercased or uppercase, for global variables/Constans, rule should ignore embedded variable casing.

  • Reports json_report not working from command line execution[Bug]

    Reports json_report not working from command line execution[Bug]

    What happened?

    Hi, Reading the doc seems i can get a report with the list of issues found in JSON format with the command robocop -r json_report -o report.json file/to/parse.robot. But seems this doesn't work and instead I get a file with the classic text line "{source}:{line}:{col} [{severity}] {rule_id} {desc} ({name})"

    Is it a bug or am i missing something? thank you very much

    Operating System

    10.0.19042

    Robocop version

    1.12.0

  • Problem with uneven-indent rule

    Problem with uneven-indent rule

    Consider following code snippet:

    *** Settings ***
    Documentation  Suite doc
    
    
    *** Keywords ***
    My Keyword    # robocop: disable
        [Documentation]  Some doc
        No Operation
    
    

    It does not report any issues. But if we change line 6th and decrease the number of spaces between the keyword name and the comment (which is a Robocop disabler) by 2, so the line looks like this:

    My Keyword  # robocop: disable
    

    then we have this issue reported by Robocop: indent_robocop.robot:7:5 [W] 1007 Line is over-indented (uneven-indent) which should not happen.

  • [Bug] Rule #1005 ignores comment lines

    [Bug] Rule #1005 ignores comment lines

    What happened?

    An example code

    Keyword1
         Keyword2
    
    # Comment
    
    Keyword3
         Keyword4
    

    won't pass the rule 1005 (empty-lines-between-keywords). The received output will be as follows:

    Invalid number of empty lines between keywords (2/1)

    It's down to preferences, but as a RF user I see use cases for having e.g. keyword library section separators (and multiple other use cases) that could be done with single-line comments between keywords.

    Operating System

    Windows

    Robocop version

    2.0.2

  • [Bug] Not enough whitespace after ... mark is recognized as new variable

    [Bug] Not enough whitespace after ... mark is recognized as new variable

    This code:

    ${VARIABLE}=
    ... """                                            ${\n}
    ... data:                             ${\n}
    ... ( a b c ) = ( 1  2  3 ) ${\n}
    ... """
    

    produces:

    test.robot:23:0 [E] 0803 Multiple variables with name "... """" in Variables section. Note that Robot Framework is case-insensitive (duplicated-variable)
    test.robot:26:0 [E] 0803 Multiple variables with name "... """" in Variables section. Note that Robot Framework is case-insensitive (duplicated-variable)
    

    I think it should rather be catched by "not-enough-whitespace-after-newline-marker" rule (but it's keyword naming rule.. maybe we should export it to be general rule checking all statements that starts from the beginning of line and contains ...?)

  • SonarQube module for Robocop

    SonarQube module for Robocop

    Hello,

    In order to follow up the code quality of our robot framework scripts, we are interested to have a SonarQube module.

    Thank you in advance.

    KR,

    Aurรฉlien

  • [Bug] bad-indent when using data-driven style tests with `[Tags]`

    [Bug] bad-indent when using data-driven style tests with `[Tags]`

    What happened?

    Whenย using data-driven style tests, and including [Tags], robocop gives errors like foobar.robot:15:37 [W] 1008 Line is over-indented (bad-indent)

    For the robot file:

    *** Settings ***
    Test Template       Login with invalid credentials should fail
    
    *** Test Cases ***                  USERNAME            PASSWORD
    Invalid User Name                   [Tags]              foo
                                        invalid             ${VALID PASSWORD}
    Invalid Password                    [Documentation]     foo
                                        [Tags]              bar
                                        ${VALID USER}       invalid
    Invalid User Name and Password      [Tags]              baz
                                        invalid             invalid
    Empty User Name
                                        ${EMPTY}            ${VALID PASSWORD}
    Empty Password                      ${VALID USER}       ${EMPTY}
                                        [Tags]              spam  eggs
    Empty User Name and Password        ${EMPTY}            ${EMPTY}
    
    
    *** Keywords ***
    Login With Invalid Credentials Should Fail
        [Arguments]    ${username}    ${password}
        No Operation
    

    Editing the lines with errors (removing spaces until it no longer gives any indentation related errors) gives the following. It looks like it is subtracting the length of the test case name from the number of required spaces.

    *** Settings ***
    Test Template       Login with invalid credentials should fail
    
    *** Test Cases ***                  USERNAME            PASSWORD
    Invalid User Name                   [Tags]              foo
                       invalid             ${VALID PASSWORD}
    Invalid Password                    [Documentation]     foo
                                        [Tags]              bar
                                        ${VALID USER}       invalid
    Invalid User Name and Password      [Tags]              baz
          invalid             invalid
    Empty User Name
                                        ${EMPTY}            ${VALID PASSWORD}
    Empty Password                      ${VALID USER}       ${EMPTY}
                          [Tags]              spam  eggs
    Empty User Name and Password        ${EMPTY}            ${EMPTY}
    
    
    *** Keywords ***
    Login With Invalid Credentials Should Fail
        [Arguments]    ${username}    ${password}
        No Operation
    

    Related robotidy issue: https://github.com/MarketSquare/robotframework-tidy/issues/443

    Operating System

    No response

    Robocop version

    2.6.0

  • Bump robotframework from 5.0.1 to 6.0.1 in /tests/packages/rf-stable5

    Bump robotframework from 5.0.1 to 6.0.1 in /tests/packages/rf-stable5

    Bumps robotframework from 5.0.1 to 6.0.1.

    Release notes

    Sourced from robotframework's releases.

    Robot Framework 6.0.1 is the first bug fix release in the RF 6.0 series. It mainly fixes a bug in using localized BDD prefixes consisting of more than one word (#4515) as well as a regression related to the library search order (#4516).

    For more details see the full release notes.

    Robot Framework 6.0 is a new major release that starts Robot Framework's localization efforts. In addition to that, it contains several nice enhancements related to, for example, automatic argument conversion and using embedded arguments. Initially it had version 5.1 and was considered a feature release, but it grow so big that we decided to call it a major release instead.

    For more details see the full release notes.

    Robot Framework 6.0 rc 2

    Robot Framework 6.0 is a new major release that starts Robot Framework's localization efforts. In addition to that, it contains several nice enhancements related to, for example, automatic argument conversion and using embedded arguments. Robot Framework 6.0 rc 2 is the second and hopefully the last release candidate containing all features and fixes planned to be included in the final release.

    Robot Framework 6.0 was initially labeled Robot Framework 5.1 and considered a feature release. In the end it grow so big that we decided to make it a major release instead.

    For more details see the full release notes.

    Robot Framework 6.0 rc 1

    Robot Framework 6.0 is a new major release that starts Robot Framework's localization efforts. In addition to that, it contains several nice enhancements related to, for example, automatic argument conversion and using embedded arguments. Robot Framework 6.0 rc 1 is the first and hopefully also the last release candidate containing all features and fixes planned to be included in the final release.

    Robot Framework 6.0 was initially labeled Robot Framework 5.1 and considered a feature release. In the end it grow so big that we decided to make it a major release instead.

    For more details see the full release notes.

    Robot Framework 5.1 beta 2

    Robot Framework 5.1 is a new feature release that starts Robot Framework's localization efforts and also brings in other nice enhancements. Robot Framework 5.1 preview releases are targeted especially for people interested in translations.

    For more details see the full release notes.

    Robot Framework 5.1 beta 1

    Robot Framework 5.1 is a new feature release that starts Robot Framework's localization efforts and also brings in other nice enhancements. Robot Framework 5.1 preview releases are targeted especially for people interested in translations.

    For more details see the full release notes.

    Robot Framework 5.1 alpha 2

    Robot Framework 5.1 is a new feature release that starts Robot Framework's localization efforts and also brings in other nice enhancements. Robot Framework 5.1 alpha releases are targeted especially for people interested in translations.

    For more details see the full release notes.

    Robot Framework 5.1 alpha 1

    Robot Framework 5.1 is a new feature release that starts Robot Framework's localization efforts and also brings in other nice enhancements. Robot Framework 5.1 alpha 1 is the first preview release targeted especially for people interested in translations.

    For more details see the full release notes.

    Commits
    • 677976a Updated version to 6.0.1
    • 03f0119 Release notes for 6.0.1
    • a5b698d Fix version numbers in docs and in a warning. Fixes #4525.
    • 628b44b Fix unit test failing around DST. Fixes #4523.
    • e1ccafe Add timedelta support to timestr_to_secs.
    • e4bdf02 Fix DocumentationBuilder w/ resource files having .robot extension.
    • 6c92dd4 Enhance docs of Libdoc's public API. Fixes #4520.
    • acc61b8 Fix search order w/ two matches when one is from std lib.
    • 886ffcf Fix multipart BDD prefixes. #4515
    • 314f398 API doc typo fix
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Could the `dateutil` dependency by dropped?

    Could the `dateutil` dependency by dropped?

    From what I see it's only usage is to get the local timezone, but this is available from the datetime directly.

    See: https://stackoverflow.com/a/52606421/110451

    Or am I missing something here?

  • Could the `packaging` dependency be dropped?

    Could the `packaging` dependency be dropped?

    From what I can see, packaging is used just for its Version and it checks mostly the major/minor versions, where getting the major/minor version through a split with . and using it as a tuple only with major/minor should suffice.

    This dep brings or pyparsing too, so, it brings up a lot of code just to check the version...

    As for the reason for me, sometimes I do have issues because a version of robocop is vendored in the language server, which means it's not pip-installed, but if the user has an older version of packaging installed in its env robocop doesn't really work...

A static analysis tool for Python

pyanalyze Pyanalyze is a tool for programmatically detecting common mistakes in Python code, such as references to undefined variables and some catego

Jan 7, 2023
TidyPy is a tool that encapsulates a number of other static analysis tools and makes it easy to configure, execute, and review their results.

TidyPy Contents Overview Features Usage Docker Configuration Ignoring Issues Included Tools Included Reporters Included Integrations Extending TidyPy

Nov 27, 2022
Pymwp is a tool for automatically performing static analysis on programs written in C

pymwp: MWP analysis in Python pymwp is a tool for automatically performing static analysis on programs written in C, inspired by "A Flow Calculus of m

Dec 2, 2022
A static type analyzer for Python code

pytype - ? โœ” Pytype checks and infers types for your Python code - without requiring type annotations. Pytype can: Lint plain Python code, flagging c

Dec 31, 2022
A simple stopwatch for measuring code performance with static typing.

A simple stopwatch for measuring code performance. This is a fork from python-stopwatch, which adds static typing and a few other things.

Feb 18, 2022
Collection of library stubs for Python, with static types

typeshed About Typeshed contains external type annotations for the Python standard library and Python builtins, as well as third party packages as con

Jan 2, 2023
A system for Python that generates static type annotations by collecting runtime types

MonkeyType MonkeyType collects runtime types of function arguments and return values, and can automatically generate stub files or even add draft type

Jan 2, 2023
Optional static typing for Python 3 and 2 (PEP 484)

Mypy: Optional Static Typing for Python Got a question? Join us on Gitter! We don't have a mailing list; but we are always happy to answer questions o

Jan 5, 2023
Static type checker for Python
Static type checker for Python

Static type checker for Python Speed Pyright is a fast type checker meant for large Python source bases. It can run in a โ€œwatchโ€ mode and performs fas

Jan 7, 2023
Code audit tool for python.

Pylama Code audit tool for Python and JavaScript. Pylama wraps these tools: pycodestyle (formerly pep8) ยฉ 2012-2013, Florent Xicluna; pydocstyle (form

Dec 29, 2022
Metrinome is an all-purpose tool for working with code complexity metrics.
Metrinome is an all-purpose tool for working with code complexity metrics.

Overview Metrinome is an all-purpose tool for working with code complexity metrics. It can be used as both a REPL and API, and includes: Converters to

Dec 26, 2022
Alarmer is a tool focus on error reporting for your application.

alarmer Alarmer is a tool focus on error reporting for your application. Installation pip install alarmer Usage It's simple to integrate alarmer in yo

Jul 3, 2022
coala provides a unified command-line interface for linting and fixing all your code, regardless of the programming languages you use.

"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." โ€• John F. Woods coala provides a

Jan 2, 2023
Turn your Python and Javascript code into DOT flowcharts
Turn your Python and Javascript code into DOT flowcharts

Notes from 2017 This is an older project which I am no longer working on. It was built before ES6 existed and before Python 3 had much usage. While it

Jan 9, 2023
Find dead Python code

Vulture - Find dead code Vulture finds unused code in Python programs. This is useful for cleaning up and finding errors in large code bases. If you r

Jan 3, 2023
The uncompromising Python code formatter
The uncompromising Python code formatter

The Uncompromising Code Formatter โ€œAny color you like.โ€ Black is the uncompromising Python code formatter. By using it, you agree to cede control over

Dec 28, 2022
Guesslang detects the programming language of a given source code
Guesslang detects the programming language of a given source code

Detect the programming language of a source code

Dec 29, 2022
Learning source code review, spot vulnerability, find some ways how to fix it.

Learn Source Code Review Learning source code review, spot vulnerability, find some ways how to fix it. WordPress Plugin Authenticated Stored XSS on C

Dec 31, 2022
Print a directory tree structure in your Python code.

directory-structure Print a directory tree structure in your Python code. Download You can simply: pip install directory-structure Or you can also: Cl

Dec 19, 2022