Code Monkey home page Code Monkey logo

Comments (8)

LegalizeAdulthood avatar LegalizeAdulthood commented on August 24, 2024 1

cppcheck is available on all platforms; there isn't an out-of-the-box ready experience for clang-tidy on Windows yet AFAIK.

from cpp.

LegalizeAdulthood avatar LegalizeAdulthood commented on August 24, 2024

There are a couple issues here. First, there is the "styling" of code: spaces vs. tabs, placing of space characters, bracing styles, etc. Second, are static analysis tools.

from cpp.

kytrinyx avatar kytrinyx commented on August 24, 2024

This is definitely about (consistent) style (spaces, braces, that sort of thing), not static analysis.

Static analysis is a delightful rabbit hole, though, and we're exploring the possibility of integrating some aspects of that into exercism (see exploration/discussion here: exercism/exercism#1607).

from cpp.

LegalizeAdulthood avatar LegalizeAdulthood commented on August 24, 2024

OK, in the realm of styling, I know of tools that exist to reformat your C++ according to some style guide, but they don't give you feedback on how well you are doing at matching a particular style or even if your style is consistent throughout.

I think what comes closest to the ruby example shown in pull request #1607 for C++ is cppcheck with it's performance and style category of warnings. clang-modernize is a source-to-source transformation tool that can replace outdated constructs with C++11 constructs, but it simply modifies your source file in place, it does not provide feedback without the user running a before-and-after diff.

from cpp.

kytrinyx avatar kytrinyx commented on August 24, 2024

I think warnings are more useful than transformations, except where there's a language-wide consensus (such as with Go - Go has both go fmt that does transformations for everything that is completely accepted, and go lint for style warnings). This is because I think it's interesting to have the discussions about why one choice might be better than another, rather than just enforcing a choice.

In this case I think that cppcheck sounds like a better choice.

from cpp.

LegalizeAdulthood avatar LegalizeAdulthood commented on August 24, 2024

Yeah, cppcheck is better for providing this sort of feedback. For instance, cppcheck will issue an error when you use iterators over containers along with container modifying operations in such a way that the iterators are invalidated and you're going off into undefined behavior. It also will nitpick you on things like bit shifting signed quantities in ways that lead to undefined behavior, memory leaks, etc. Those all fall into the error category.

Things get more interesting when you turn on style and performance warnings. Then you get things like preferring ++iter instead of iter++ unless you need the previous value of iter. While cppcheck isn't the greatest, I think it is easy to use, easy to deploy and the messages are easy to interpret.

from cpp.

kytrinyx avatar kytrinyx commented on August 24, 2024

cool, it sounds like a good choice.

from cpp.

celavek avatar celavek commented on August 24, 2024

How about clang-tidy?

from cpp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.