Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adopt linrtunner as the linting tool #14306

Closed
wants to merge 34 commits into from
Closed

Conversation

justinchuby
Copy link
Contributor

@justinchuby justinchuby commented Jan 16, 2023

Description

lintrunner is a linter runner successfully used by pytorch, onnx and onnx-script. This PR adopts lintrunner to onnxruntime and hand fixed ~2000 flake8 errors in Python code. lintrunner now runs all required python lints including flake8, black and isort. Future lints like clang-format can be added.

In particular, this PR removed some very suboptimal patterns:

  • import *
  • mutable values as default in function definitions (def func(a=[]))
  • not xxx in -> xxx not in membership checks
  • bare excepts (except: -> except Exception)
  • unused imports
  • unused local variables

The added workflow supports SARIF code scanning reports on github, example snapshot:

image

Motivation and Context

Unified linting experience in CI and local.

@justinchuby justinchuby requested review from a team as code owners January 16, 2023 04:23
@justinchuby justinchuby requested review from snnn and edgchen1 January 16, 2023 04:25
Copy link
Contributor

@github-advanced-security github-advanced-security bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CodeQL found more than 10 potential problems in the proposed changes. Check the Files changed tab for more details.

mszhanyi
mszhanyi previously approved these changes Jan 16, 2023
Copy link
Contributor

@mszhanyi mszhanyi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks.

@justinchuby
Copy link
Contributor Author

Todo: the rest of the lints; ort training import order

from opgen.ast import *
from typing import List, Tuple, Union, Optional
from opgen.lexer import *

Check notice

Code scanning / CodeQL

'import *' may pollute namespace

Import pollutes the enclosing namespace, as the imported module [opgen.lexer](1) does not define '__all__'.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Existing error I didn't have the bandwidth fixing

@@ -600,7 +600,7 @@
# Use no past state for these models
if config.use_cache:
config.use_cache = False
except:
except Exception:

Check notice

Code scanning / CodeQL

Empty except

'except' clause does nothing but pass and there is no explanatory comment.
@@ -102,15 +102,15 @@

try:
from .build_and_package_info import cuda_version
except: # noqa
except Exception:

Check notice

Code scanning / CodeQL

Empty except

'except' clause does nothing but pass and there is no explanatory comment.
import numpy as np

# Restore dlopen flags.
import orttraining_external_custom_ops

Check notice

Code scanning / CodeQL

Unused import

Import of 'orttraining_external_custom_ops' is not used.
@justinchuby justinchuby marked this pull request as draft January 17, 2023 15:46
onnxruntime/python/tools/symbolic_shape_infer.py Outdated Show resolved Hide resolved
.lintrunner.toml Outdated Show resolved Hide resolved
@justinchuby
Copy link
Contributor Author

I'll be back at this after the release to cause less disruption

@justinchuby
Copy link
Contributor Author

Replaced by #15085

justinchuby added a commit that referenced this pull request Mar 24, 2023
### Description

`lintrunner` is a linter runner successfully used by pytorch, onnx and
onnx-script. It provides a uniform experience running linters locally
and in CI. It supports all major dev systems: Windows, Linux and MacOs.
The checks are enforced by the `Python format` workflow.

This PR adopts `lintrunner` to onnxruntime and fixed ~2000 flake8 errors
in Python code. `lintrunner` now runs all required python lints
including `ruff`(replacing `flake8`), `black` and `isort`. Future lints
like `clang-format` can be added.

Most errors are auto-fixed by `ruff` and the fixes should be considered
robust.

Lints that are more complicated to fix are applied `# noqa` for now and
should be fixed in follow up PRs.

### Notable changes

1. This PR **removed some suboptimal patterns**:

	- `not xxx in` -> `xxx not in` membership checks
	- bare excepts (`except:` -> `except Exception`)
	- unused imports
	
	The follow up PR will remove:
	
	- `import *`
	- mutable values as default in function definitions (`def func(a=[])`)
	- more unused imports
	- unused local variables

2. Use `ruff` to replace `flake8`. `ruff` is much (40x) faster than
flake8 and is more robust. We are using it successfully in onnx and
onnx-script. It also supports auto-fixing many flake8 errors.

3. Removed the legacy flake8 ci flow and updated docs.

4. The added workflow supports SARIF code scanning reports on github,
example snapshot:
	

![image](https://user-images.githubusercontent.com/11205048/212598953-d60ce8a9-f242-4fa8-8674-8696b704604a.png)

5. Removed `onnxruntime-python-checks-ci-pipeline` as redundant

### Motivation and Context
<!-- - Why is this change required? What problem does it solve?
- If it fixes an open issue, please link to the issue here. -->

Unified linting experience in CI and local.

Replacing #14306

---------

Signed-off-by: Justin Chu <[email protected]>
@justinchuby justinchuby deleted the justinchu/lintrunner branch April 20, 2023 23:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants