BigBahss/vscode-cmantic

'Move Definition' doesn't account for changes in scope

BigBahss opened this issue · 2 comments

Currently, 'Move Definition' is basically a copy-and-paste after smart-placement is determined. It does not account for changes in scope at the target position. For instance, if the definition exists within a namespace block, and the target position is not within that same namespace, the definition will be lacking scope-resolution.
For instance:

namespace foo {
    int bar() {
        return 42;
    }
}

If bar is moved to a position that is not within namespace foo, the definition should become:

int foo::bar() {
    return 42;
}

This is something I did not account for when I created the command, and it is being worked on. This will probably be fixed in the next feature release which will add moving a definition into/out of a class body (which also needs to account for the same thing, but with the class name).

Fixed on branch move-definition.

I found an issue regarding namespace scope declarations. Consider this code:

namespace foo {
  void foo() {}
}

When I run the command "Add declaration", this is what my header file looks like:

void foo::foo();

This is illegal in C++, the correct code would be:

namespace foo {
  void foo();
}

I think this issue should be reopened.