Giter Site home page Giter Site logo

Module declaration conflicts? about nushell HOT 4 OPEN

melMass avatar melMass commented on May 18, 2024
Module declaration conflicts?

from nushell.

Comments (4)

kubouch avatar kubouch commented on May 18, 2024

Can you please paste the file contents into the issue? It's easier than downloading and unzipping the archive.

If you define a command that overrides a builtin, save the builtin as an alias with a different name before the definition, e.g., alias old-merge = merge; export def merge ....

from nushell.

melMass avatar melMass commented on May 18, 2024

The goal is not to replace merge.
The fact that padawan's merge is in scope is the bug as per the imports it shouldn't

Can you please paste the file contents into the issue? It's easier than downloading and unzipping the archive.

I don't see how but sure:

config.nu

use padawan.nu
use jedi.nu *

jedi.nu

export def main [] {
    print (help main)
}

export def "jedi fight" [] {
    {laser:"blue"} | merge {HP: 100}
}

export def "jedi health" [] {
    $in | get HP
}

padawan.nu

use jedi.nu ["jedi health"]

export def main [] {
   print (help main)
}

export def merge [base, a,b] {
    print $"($base)($a)($b)"
}

from nushell.

kubouch avatar kubouch commented on May 18, 2024

I don't see how but sure

So that anyone reading through the issue can immediately see what the problem is without downloading any files.

This is definitely a parser bug. After use padawan.nu, you have commands padawan and padawan merge, so I don't understand why it's overwriting merge in jedi.nu. If you try replacing the jedi fight body with help merge, you'll see both builtin and padawan's merge listed. This is also weird because we removed command overloading, and you shouldn't be able to define two commands with the same name. Very strange...

from nushell.

kubouch avatar kubouch commented on May 18, 2024

It also doesn't look like a cyclic import. We have a parser guard against cyclic import, and this one doesn't cyclically import anything.

But I might actually have a clue what's happening. When parsing padawan.nu, the parser first scans predeclarations, so it registers merge before continuing the parse. So, when parsing use jedi.nu ["jedi health"], there is already merge being present in the parser and thus seen inside jedi.nu.

So technically it works as intended, but for sure it's very confusing. I think modules should be more self-contained and not inherit too much from the parent scope because it can lead to weird situations like this.

from nushell.

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.