Comments (19)
Please in any case, disable Metrics/CyclomaticComplexity
. 🙏
from crystal.
I agree that Ameba is useful. My only concern is that there are no prebuilt executables, and it takes a couple minutes to recompile it on every CI run.
Note: Lint/NotNil
is annoying... until you realize you can pass an explanatory message as #not_nil!(message)
and then it stops complaining and it's much better. That doesn't mean we can enable it (yet), but it took me a while to notice that.
from crystal.
Related to crystal-ameba/ameba#448, we should def take a pass on enabling only the most useful ones to start; disabling the newer, more subjective ones.
from crystal.
I knew I reported that already 😁
crystal-ameba/github-action#18
@veelenga or github releases or anywhere. having executables ready to be installed on CI or docker images or our local computer would be ❤️
from crystal.
Caching builds shouldn't be an issue. We could easily do that ourselves with actions/cache
. Or use pre-built binaries from nixpkgs, for example.
Wouldn't hurt to have this handled upstream, though @veelenga.
There's even https://github.com/crystal-ameba/github-action for GitHub actions, but IIUC it needs to rebuild the container every time? At least reusage doesn't seem very good, right?
from crystal.
I think that having ameba enabled is a great idea. I can make a pass at it, as I've already started the process some time ago ;)
from crystal.
The action acts as a PR reviewer. It's nice to have the messages right into the code (that can/will be resolved) rather than having to reach for the CI logs. I guess it could also propose fixes as suggestions (I'm not sure it does that).
from crystal.
@straight-shoota the action uses a GitHub API to create a check-run and annotations. And token is required to do that.
https://github.com/crystal-ameba/github-action/blob/master/src/ameba-github_action/runner.cr#L3
This mechanism was developed before the capability to create annotations using stdout messages was introduced.
from crystal.
They'd be great to have and improve on the situation for everyone, but I believe they're not blockers.
from crystal.
We've had some improvements based on ameba's suggestions in the past
we avoid a wide range of simple errors that ameba can detect
My first impression of Ameba is that it is indirectly responsible for Crystal's 1.7.1 patch release, so while enforcing some kind of consistent coding style may be good on its own, I don't agree with the notion of using a syntactic linter to catch "errors".
from crystal.
@HertzDevil Yeah, error might not be the best word. Let's say ameba can help us consistently enforce some good practices?
from crystal.
@ysbaddaden I think we can prebuilt the executables and host it somewhere. Would Github packages work?
from crystal.
It needs the token to report Ameba issues as comments on the PR.
I didn't know that's a thing. Is this the default behaviour of the ameba action?
Why would we want that, though? 🤔 Would the check result from the GHA workflow not be sufficient?
from crystal.
It's nice to have the messages right into the code (that can/will be resolved) rather than having to reach for the CI logs.
This should work directly with GitHub actions via annotations or something.
There should be no need for the CI workflow to post PR review comments.
IIRC, this is already working for compiler warnings, for example.
from crystal.
Oh maybe they're annotations? anyway, it still needs a github token to do that :)
from crystal.
I'm pretty sure you don't need a token for that. You can create annotations manually by writing some specific markup to stdout: https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-a-warning-message
I do not recall how exactly this works for compiler warnings, but I don't think we do anything explicitly like that somewhere.
from crystal.
Anyway, I think getting direct feedback on code locations is an advanced feature. We don't need that in an initial implementation.
As mentioned in the OP, I think the first step should be just adding a .ameba.yml
configuration.
Then a simple CI job which just fails and prints the violations should be good enough for a start.
And of course you can use ameba locally as well.
from crystal.
@straight-shoota @ysbaddaden could you please let me understand if there are still blockers to moving this forward on Ameba's side? From what I understand we would like to:
- Have precompiled binaries
- Use GitHub action with a precompiled binaries + avoid using
GITHUB_TOKEN
Are those blockers, or would you like to move with #14631, and the two above can be resolved later?
from crystal.
Yeah, definitely not blockers.
However, I would prefer not to install ameba as a development dependency with shards. It should be built independently as a development tool, and we can cache the binary within GitHub actions.
We might also look if binary artifacts are available anywhere else. I suppose homebrew isn't cached because it's only available as a tap. Nixpkgs should work, though 🤔
from crystal.
Related Issues (20)
- Nilable `Proc` types inside libs
- Cannot return `Proc`s from top-level funs
- `ReferenceStorage(T)` is always atomic even when `T` isn't HOT 1
- Add `crystal tool method_types` for listing method parameter types HOT 4
- Passing nil to Addrinfo.getaddrinfo gives unexpected error message HOT 1
- Package installation fails on Windows due to missing SQLite3 .lib files HOT 2
- `File#truncate` raises `File::AccessDeniedError` on Windows when file was opened in append mode HOT 3
- Cache compiler results for tools
- Include more types in `crystal tool hierarchy` HOT 9
- `close_on_exec` on Windows HOT 2
- Pointer equality for `Slice` HOT 4
- Forbid variable assignment in function call HOT 4
- Captured block parameter not recognised when used inside macro HOT 2
- Internal error when using `sizeof` as generic type argument in inferred ivar type
- ECR escape sequences do not work with `-`
- Customizing or hiding `Benchmark.ips`'s output format HOT 3
- Adding a Difference method to the Math module HOT 2
- Visit the Time.local in the macro. HOT 3
- Add Makefile support `--mcpu=native` as override FLAGS to permit build crystal compiler can enable this option optional for a better performance. HOT 4
- Compiler should Emit Warning/Notes when Deduced Type Differs from Annotated Type. HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from crystal.