GithubHelp home page GithubHelp logo

Comments (1)

tomstuart avatar tomstuart commented on July 28, 2024

Things have changed since I opened the original issue in June.

The good news is that Packwerk::Node.constant_name (née #const_name) is now aware of fully-qualified constant names:

>> Packwerk::Node.constant_name(Parser::CurrentRuby.parse('::HELLO'))
=> "::HELLO"

>> Packwerk::Node.constant_name(Parser::CurrentRuby.parse('HELLO'))
=> "HELLO"

The bad news is that ParsedConstantDefinitions#collect_local_definitions doesn’t know what to do with this:

>> definitions = Packwerk::ParsedConstantDefinitions.new(
     root_node: Parser::CurrentRuby.parse('module Sales; ::HELLO = "World"; end')
   )
=> #<Packwerk::ParsedConstantDefinitions
    @local_definitions=
     {"::Sales"=>#<struct Packwerk::Node::Location line=1, column=7>,
      "::Sales::::HELLO"=>#<struct Packwerk::Node::Location line=1, column=16>}>

>> definitions.local_reference?('HELLO')
=> false # should be true

>> definitions.local_reference?('Sales::HELLO')
=> false # correct, but for the wrong reason

You can see that @local_definitions now contains an erroneous entry for ::Sales::::HELLO, formed by naively joining 'Sales' and '::HELLO' with '::'. We still have no test coverage for this so it’s not affecting the build, but it’s obviously wrong behaviour that will bite anyone who tries to use fully-qualified constants.

from packwerk.

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.