Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Symlink support #131

Closed
wesleybl opened this issue Jul 17, 2020 · 9 comments
Closed

Symlink support #131

wesleybl opened this issue Jul 17, 2020 · 9 comments
Assignees
Labels
enhancement New feature or request fixed in next version (main) A fix has been implemented and will appear in an upcoming version

Comments

@wesleybl
Copy link

wesleybl commented Jul 17, 2020

Environment data

  • Language Server version: 2020.7.2
  • OS and version: Ubuntu 18.04
  • Python version (& distribution if applicable, e.g. Anaconda): Python 2.7.17

Expected behaviour

Fill the configuration in settings.json:

"python.analysis.extraPaths": ["/home/user/lib"],

Packages inside /home/user/lib are symlinks to real path.

Type in the code:

from my

I hope the autocomplete will suggest all packages that start with my inside the /home/user/lib folder.

Actual behaviour

The autocomplete doesn't suggest packages inside the /home/user/lib folder.

Logs

Background analysis message: setFileOpened
Background analysis message: markFilesDirty
[FG] completion at /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py:1:1 ...
[FG]   parsing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (1ms)
[FG]   binding: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
[FG] completion at /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py:1:1 [found 23 items] (3ms)
Background analysis message: getDiagnosticsForRange
Background analysis message: getDiagnosticsForRange
Background analysis message: setFileOpened
Background analysis message: markFilesDirty
[FG] completion at /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py:1:2 ...
[FG]   parsing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
[FG]   binding: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
[FG] completion at /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py:1:2 [found 15 items] (3ms)
Background analysis message: getSemanticTokens
[BG(1)] parsing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (1ms)
[BG(1)] binding: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
[FG] completion at /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py:1:3 ...
[FG]   parsing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
[FG]   binding: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (1ms)
[FG] completion at /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py:1:3 [found 11 items] (3ms)
Background analysis message: setFileOpened
Background analysis message: markFilesDirty
Background analysis message: setFileOpened
Background analysis message: markFilesDirty
Background analysis message: getSemanticTokens
[BG(1)] parsing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (1ms)
[BG(1)] binding: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
Background analysis message: setFileOpened
Background analysis message: markFilesDirty
Background analysis message: analyze
[BG(1)] analyzing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py ...
[BG(1)]   parsing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (2ms)
[BG(1)]   binding: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
[BG(1)]   checking: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
[BG(1)] analyzing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (2ms)
Background analysis message: resumeAnalysis
Background analysis message: getSemanticTokens
[FG] parsing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (2ms)
[FG] binding: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
Background analysis message: setFileOpened
Background analysis message: markFilesDirty
[FG] completion at /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py:1:6 ...
[FG]   parsing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
[FG]   binding: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
[FG] completion at /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py:1:6 [found 78 items] (8ms)
Background analysis message: analyze
[BG(1)] analyzing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py ...
[BG(1)]   parsing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (1ms)
[BG(1)]   binding: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
[BG(1)]   checking: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
[BG(1)] analyzing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (1ms)
Background analysis message: resumeAnalysis
Background analysis message: getDiagnosticsForRange
Background analysis message: getDiagnosticsForRange
Background analysis message: getSemanticTokens
Background analysis message: getDiagnosticsForRange
Background analysis message: getDiagnosticsForRange
Background analysis message: setFileOpened
Background analysis message: markFilesDirty
[FG] completion at /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py:1:7 ...
[FG]   parsing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (1ms)
[FG]   binding: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
[FG] completion at /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py:1:7 [found 7 items] (12ms)
Background analysis message: getDiagnosticsForRange
Background analysis message: getDiagnosticsForRange
Background analysis message: getSemanticTokens
[BG(1)] parsing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (1ms)
[BG(1)] binding: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (0ms)
Background analysis message: analyze
[BG(1)] analyzing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py ...
[BG(1)]   checking: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (1ms)
[BG(1)] analyzing: /home/wesleybl/git/symbolic.package/src/symbolic/package/__init__.py (1ms)
Background analysis message: resumeAnalysis
Background analysis message: getDiagnosticsForRange
Background analysis message: getDiagnosticsForRange

In this case, /home/wesleybl/lib/my is a symbolic link.

@wesleybl wesleybl changed the title Autocomplete on imports doesn't respect python.analysis.extraPaths Autocomplete on imports doesn't respect python.analysis.extraPaths when we have symlinks Jul 18, 2020
@wesleybl
Copy link
Author

In fact, the problem only occurs if we have symlinks. I updated the title and description.

@wesleybl
Copy link
Author

@judej @jakebailey I created a repository to simulate the problem. To see:

https://github.com/wesleybl/symbolic.package

@cnaccio
Copy link

cnaccio commented Nov 22, 2020

Also running into this issue. On OSX/Mac

@wesleybl
Copy link
Author

wesleybl commented Dec 5, 2020

@judej @jakebailey added the log in the description.

@sid22
Copy link

sid22 commented Dec 18, 2020

Getting same issue in MacOS. Pylance isn't recognising the extraPaths property.

@savannahostrowski savannahostrowski added enhancement New feature or request and removed needs investigation Could be an issue - needs investigation labels Jan 27, 2021
@judej
Copy link
Contributor

judej commented Jan 27, 2021

We need to add support for symlinks. Marked as enhancement

@jakebailey jakebailey changed the title Autocomplete on imports doesn't respect python.analysis.extraPaths when we have symlinks Symlink support Feb 24, 2021
@jakebailey
Copy link
Member

FWIW, the next release includes some better handling of symlinks (microsoft/pyright@4bd1c58) which I believe should fix most of these issues. Specifically, when the import resolver iterates over the contents of a directory and encounters a symlink, it will follow the symlink to check to see if it's a file/directory (and therefore recognize them as importable modules). I believe that covers explicitly the original issue (a directory containing symlinks).

@jakebailey jakebailey added the fixed in next version (main) A fix has been implemented and will appear in an upcoming version label Mar 11, 2021
@jakebailey
Copy link
Member

This issue has been fixed in version 2021.3.1, which we've just released. You can find the changelog here: https://github.com/microsoft/pylance-release/blob/main/CHANGELOG.md#202131-10-march-2021

Since symlinks are tricky, if you encounter some issues with this support we'd appreciate a new issue to pin things down. 🙂

@wesleybl
Copy link
Author

@jakebailey unfortunately it did not solve the autocomplete problem: #1031

Would it be possible to prioritize this? Thanks for the great job!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request fixed in next version (main) A fix has been implemented and will appear in an upcoming version
Projects
None yet
Development

No branches or pull requests

6 participants