(#13102) docs: Document working locally + Conan 2.0 commands

* docs: Document working locally + Conan 2.0 commands

I also snuck in some format and link fixes

* Apply suggestions from code review

Co-authored-by: Uilian Ries <uilianries@gmail.com>

* Update docs/README.md

* Update docs/developing_recipes_locally.md

* Apply suggestions from code review

Co-authored-by: Jordan Williams <jordan@jwillikers.com>

* Update CONTRIBUTING.md

Co-authored-by: Uilian Ries <uilianries@gmail.com>

* merge linters into dev locally

* links and touch ups

* fix links

* Apply suggestions from code review

Co-authored-by: Jordan Williams <jordan@jwillikers.com>

Co-authored-by: Uilian Ries <uilianries@gmail.com>
Co-authored-by: Jordan Williams <jordan@jwillikers.com>
This commit is contained in:
Chris Mc
2022-10-06 12:06:22 -07:00
committed by GitHub
parent 22d8d24df0
commit 318053389c
9 changed files with 315 additions and 142 deletions

View File

@@ -1,37 +1,33 @@
## Conan Center Index Linters
# ConanCenterIndex Linters
Some linter configuration files are available in the folder [linter](../linter), which are executed by Github Actions to improve recipe quality.
They consume python scripts which are executed to fit CCI rules. Those scripts use [astroid](https://github.com/PyCQA/astroid) and
[pylint](https://pylint.pycqa.org/en/latest/) classes to parse Conan recipe files and manage their warnings and errors.
The pylint by itselt is not able to find Conan Center Index rules, so astroid is used to iterate over conanfiles content and
Pylint by itself is not able to find ConanCenterIndex rules, so astroid is used to iterate over conanfiles content and
validate CCI conditions. Also, pylint uses [rcfile](https://pylint.pycqa.org/en/latest/user_guide/configuration/index.html)
(a configuration file based on [toml](https://toml.io/en/) format) to configure plugins, warnings and errors which should be enabled or disabled.
Also, the Github [code review](https://github.com/features/code-review) is integrated with the pylint output,
parsed by [recipe_linter.json](../linter/recipe_linter.json), then presented to all users on the tab `Files changed`.
### Running Linters
<!-- toc -->
## Contents<!-- endToc -->
Of course, you should run any linter locally, before pushing your code, read [Running the linter locally](v2_linter.md#running-the-linter-locally) for instructions.
## Running the linter locally
Check the [Developing Recipes](developing_recipes_locally.md#running-the-python-linters) page for details.
### Pylint configuration files
## Pylint configuration files
#### [Pylint Recipe](../linter/pylintrc_recipe)
- [Pylint Recipe](../linter/pylintrc_recipe): This `rcfile` lists plugins and rules to be executed over all recipes (not test package) and validate them.
- [Pylint Test Package Recipe](../linter/pylintrc_testpackage): This `rcfile` lists plugins and rules to be executed over all recipes in test package folders only:
This rcfile lists plugins and rules to be executed over all recipes (not test package) and validate them.
#### [Pylint Test Package Recipe](../linter/pylintrc_testpackage)
This rcfile lists plugins and rules to be executed over all recipes in test package folders only:
### Linter Warning and Errors
## Linter Warning and Errors
Here is the list of current warning and errors provided by pylint, when using CCI configuration.
#### E9006 - conan-import-conanfile: ConanFile should be imported from conan
### E9006 - conan-import-conanfile: ConanFile should be imported from conan
```python
from conans import ConanFile
@@ -43,16 +39,7 @@ Should be replaced by:
from conan import Conanfile
```
#### E9004 - conan-package-name: Conan package names must be lower-case
The package name is always lower-case, even when the upstream uses another format
```python
def FoobarConanfile(ConanFile):
name = "foobar"
```
#### E9005 - conan-missing-name: Every conan recipe must contain the attribute name
### E9005 - conan-missing-name: Every conan recipe must contain the attribute name
The attribute `name` is always expected. On the other hand, `version` should not be listed.
@@ -61,17 +48,27 @@ def BazConanfile(ConanFile):
name = "baz"
```
#### E9007 - conan-test-no-name: Do not add name attribute in test package recipes
### E9004 - conan-package-name: Conan package names must be lower-case
The test package is not a package, thus, it should not have a name
The package name is always lower-case, even when the upstream uses another format
```python
def FoobarConanfile(ConanFile):
name = "foobar"
```
### E9007 - conan-test-no-name: Do not add name attribute in test package recipes
The test package is not a recipe, thus, it should not have a name
```python
def TestPackageConanFile(ConanFile):
name = "test_package" # Wrong!
```
#### E9008 - conan-import-errors: Deprecated imports should be replaced by new imports. Read [v2_linter](v2_linter.md)
### E9008 - conan-import-errors: Deprecated imports should be replaced by new imports
Read [v2_linter](v2_linter.md) for a list of mappings of v1 to v2.
Regular imports from `conans.tools` are now updated:
```python
@@ -81,7 +78,7 @@ from conans import tools
tools.rmdir(os.path.join(self.package_folder, "shared"))
```
Should be replaced by specilized tools, prepared for Conan 2.0
Should be replaced by specialized tools, prepared for Conan 2.0
```python
from conan.tools.files import rmdir
@@ -90,7 +87,7 @@ from conan.tools.files import rmdir
rmdir(self, os.path.join(self.package_folder, "shared"))
```
#### E9009 - conan-import-error-conanexception: conans.errors is deprecated and conan.errors should be used instead
### E9009 - conan-import-error-conanexception: conans.errors is deprecated and conan.errors should be used instead
```python
from conans.errors import ConanException
@@ -104,8 +101,7 @@ from conan.errors import ConanException
Only the namespace `conans` has been replaced by `conan`.
#### E9010 - conan-import-error-conaninvalidconfiguration: conans.errors is deprecated and conan.errors should be used instead
### E9010 - conan-import-error-conaninvalidconfiguration: conans.errors is deprecated and conan.errors should be used instead
```python
from conans.errors import ConanInvalidConfiguration
@@ -119,11 +115,9 @@ from conan.errors import ConanInvalidConfiguration
Only the namespace `conans` has been replaced by `conan`.
#### E9011 - conan-import-tools: Importing conan.tools or conan.tools.xxx.zzz.yyy should be considered as private
### E9011 - conan-import-tools: Importing conan.tools or conan.tools.xxx.zzz.yyy should be considered as private
Documented on [conanfile.tools](https://docs.conan.io/en/latest/reference/conanfile/tools.html):
It's not allowed to use `tools.xxx` directly:
```python