All Projects → MarketSquare → robotframework-robocop

MarketSquare / robotframework-robocop

Licence: Apache-2.0 license
Tool for static code analysis of Robot Framework language

Programming Languages

python
139335 projects - #7 most used programming language
RobotFramework
109 projects

Projects that are alternatives of or similar to robotframework-robocop

netascode
This repo contains an example of the virtual network of a fictitious company which you can use to play and to learn network automation. Public repository for Network as Code. NaC model.
Stars: ✭ 36 (-67.86%)
Mutual labels:  robotframework
flake8-simplify
❄ A flake8 plugin that helps you to simplify code
Stars: ✭ 97 (-13.39%)
Mutual labels:  linter
arcanist-linters
A collection of custom Arcanist linters
Stars: ✭ 64 (-42.86%)
Mutual labels:  linter
action-rubocop
Run rubocop with reviewdog 🐶
Stars: ✭ 83 (-25.89%)
Mutual labels:  linter
breakcheck
Backwards compatibility linter for Go.
Stars: ✭ 66 (-41.07%)
Mutual labels:  linter
rna
🚀 A bundler, a server and a test runner for modern modules and applications.
Stars: ✭ 89 (-20.54%)
Mutual labels:  linter
pymarkdown
No description or website provided.
Stars: ✭ 22 (-80.36%)
Mutual labels:  linter
extra pedantic
Stricter Dart analyzer linter settings and best practices.
Stars: ✭ 28 (-75%)
Mutual labels:  linter
staticcheck-action
Staticcheck's official GitHub Action
Stars: ✭ 47 (-58.04%)
Mutual labels:  linter
robotframework-historic
Robotframework-historic is a free, custom html report which provides historical robotframework execution results by storing execution results info in MySQL database and generate's html reports (charts / statistics) from database using Flask.
Stars: ✭ 70 (-37.5%)
Mutual labels:  robotframework
flake8-aaa
A Flake8 plugin that checks Python tests follow the Arrange-Act-Assert pattern
Stars: ✭ 51 (-54.46%)
Mutual labels:  linter
jetrockets-standard
Standard RuboCop configuration for JetRockets with cookies
Stars: ✭ 14 (-87.5%)
Mutual labels:  linter
understanding-the-python-ecosystem
This project focuses on understanding the language ecosystem
Stars: ✭ 68 (-39.29%)
Mutual labels:  linter
bpmnlint
Validate BPMN diagrams based on configurable lint rules.
Stars: ✭ 82 (-26.79%)
Mutual labels:  linter
atom-minimap-linter
Atom package to display linter markers on minimap
Stars: ✭ 26 (-76.79%)
Mutual labels:  linter
linter-pylama
Lint python in the Atom on the fly, using pylama
Stars: ✭ 22 (-80.36%)
Mutual labels:  linter
folderslint
📁 Directory structure linter for JavaScript projects
Stars: ✭ 131 (+16.96%)
Mutual labels:  linter
arduino-lint
Tool to check for problems with Arduino projects
Stars: ✭ 63 (-43.75%)
Mutual labels:  linter
eslint-config-kingstinct-react-native
Eslint configuration for React-native based on Airbnb with some great tweaks
Stars: ✭ 23 (-79.46%)
Mutual labels:  linter
relint
General purpose RegEx based file linter.
Stars: ✭ 33 (-70.54%)
Mutual labels:  linter

Unit-tests Codecov PyPI Python versions Licence Downloads


Robocop

Watch our talk from RoboCon 2021 about Robocop & 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 the 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 '*** Variables ***' is empty (empty-section)
C:\OCP_project\tests\test.robot:22:1 [E] 0801 Multiple test cases with name "Simple Test" (first occurrence in line 17) (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 'my keyword' does not follow case convention (wrong-case-in-keyword-name)
C:\OCP_project\tests\test.robot:51:13 [I] 0606 Tag 'mytag' is already set by Force Tags in suite settings (tag-already-set-in-force-tags)

Found 5 issues: 2 WARNINGs, 2 ERRORs, 1 INFOs.

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: FileSettingsToolsExternal 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 toolsRobocop.

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 SettingsKeymap.

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 <rule>:<param_name>:<value> where:

  • <rule> can either be rule name or its id
  • <param_name> is a public name of the parameter
  • <value> 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:<severity>=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 the 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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].