Visual Studio Code configuration for buildout-based Python projects
Project description
Introduction
collective.recipe.vscode is the buildout recipe for Visual Studio Code lover who wants python autocomplete and intelliSense features while developing python Buildout based project, normally buildout eggs are not available in python path even if you provide virtualenv python path. This tool will help not only adding eggs path as python extraPath but also you can manage per project basis vscode settings for linter, autoformatting.
A general question may arise that why we will use this tool, whether we can create Visual Studio Code project settings easily (we have better knowledge over Visual Studio Code configuration)? Well i completely agree with you, but if you want to get benefited from Visual Studio Code autocompletion feature (basically I am lover of autocompletion), you have to add all eggs links and it is hard to manage eggs links manually if the size of project is big (think about any Plone powered project), beside it is good practice allways use project specific linter path. For example my global flake8 linter doesn’t work for my python3 project!
Installation
Install collective.recipe.vscode is simple enough, just need to create a section for vscode to your buildout. Before using collective.recipe.vscode, if you are going to use linter feature, make those are added in eggs section or globally installed.
Example Buildout:
[buildout] parts += vscode [vscode] recipe = collective.recipe.vscode flake8-enabled = True flake8-path = ${buildout:directory}/bin/flake8 black-enabled = True black-args = ----line-length 88
You can also use the following to include the vscode recipe in all your buildouts automatically
Modify/Add ~/.buildout/default.cfg:
[buildout] _to_always_include_vscode = ${vscode:recipe} [vscode] recipe = collective.recipe.vscode _to_remove_buildout_warning = ${buildout:_to_always_include_vscode}
Available Options
- eggs
Required: No
Default: Will find all recipes with eggs specified and include them.
Your project’s list of eggs, those are going to be added as extra path for autocomplete and intelliSense.
- python-path
Required: No
Default: collective.recipe.vscode will find current python executable path.
The python executable path for current project, if you are using virtual environment then should be that python path. FYI: ${home} and ${project} variable should work.
flake8-enabled
Required: No
Default: False
Flag that indicates flake8 based linting.
- flake8-path
Required: No
Default: try to find flake8 executable path automatically.
- flake8-args
Required: No
Default: “”
pylint-enabled
Required: No Default: False
- pylint-path
Required: No
Default: try to find pylint executable path automatically.
- pylint-args
Required: No
Default:
- pep8-enabled
Required: No
Default: False
- pep8-path
Required: No
Default: try to find pep8 executable path automatically.
- pep8-args
Required: No
Default: “”
- jedi-enabled
Required: No
Default: False
If False then python.languageServer will be Pylance. Ensure you have installed the Pylance vscode extension.
- omelette-location
Required: No
Default: ${buildout:directory}/parts/omelette - the default omelette location.
- autocomplete-use-omelette
Required: No
Default: False
- black-enabled
Required: No
Default: False
- black-path
Required: No
Default: try to find black executable path automatically.
You could provide buildout specific black executable. It is very flexible way to avoid using global pylint. Example of relative path usecase: i.) ${buildout:directory}/bin/black ii.) $project_path/bin/black iii.) ./bin/black iv.) ~/path/bin/black
- black-args
Required: No
Default: ‘’
- isort-enabled
Required: No
Default: False
Flag that indicates isort is enabled.
- isort-path
Required: No
Default: try to find isort executable path automatically.
- isort-args
Required: No
Default: ‘’
- ignore-develop
Required: No
Default: False
If you don’t want development eggs, should go for autocompletion.
- ignores
Required: No
Default: “”
If you want specific eggs should not go for autocompletion.
- packages
Required: No
Default: “”
Location of some python scripts or non standard modules (don’t have setup file), you want to be in system path.
- generate-envfile
Required: No
Default: True
Generate .env file to add eggs to PYTHONPATH
- robot-enabled
Required: No
Default: False
Generate setting robot.python.env with buildout eggs for Robot Framework Language Server. Generate task Start Plone Test Server into tasks.json. Generate task Robot Framework: Launch Template into launch.json for Robot Framework Language Server.
Links
Code repository:
Continuous Integration:
Issue Tracker:
https://github.com/nazrulworld/collective.recipe.vscode/issues
Example Usage
Install vscode recipe with stndard settings:
>>> write(sample_buildout, 'buildout.cfg', ... """ ... [buildout] ... develop = ... %(test_dir)s/develop/vscodetest_pkg1 ... eggs = ... vscodetest_pkg1 ... zc.recipe.egg ... zc.buildout ... parts = vscode ... ... [vscode] ... recipe = collective.recipe.vscode ... packages = %(test_dir)s/Products ... ignore-develop = False ... eggs = ${buildout:eggs} ... flake8-enabled = True ... flake8-path = ${buildout:directory}/bin/flake8 ... black-enabled = True ... black-path = $project_path/bin/black ... black-args = --line-length 88 ... --skip-string-normalization ... """ % globals()) >>> output_lower = system(buildout + ' -c buildout.cfg').lower() >>> "installing vscode." in output_lower True >>> 'tests/develop/vscodetest_pkg1' in output_lower True >>> ls(sample_buildout) - .installed.cfg d .vscode d bin - buildout.cfg d develop-eggs d eggs d parts <BLANKLINE> >>> import json >>> import os >>> from collective.recipe.vscode.recipes import mappings >>> settings_dir = os.path.join(sample_buildout, ".vscode") >>> vsc_settings = json.loads(read(settings_dir, 'settings.json')) >>> len(vsc_settings[mappings['autocomplete-extrapaths']]) == 4 True >>> mappings['flake8-enabled'] in vsc_settings True >>> vsc_settings[mappings['formatting-provider']] == "black" True
- VS Code settings with all default options::
>>> os.unlink(os.path.join(settings_dir, 'settings.json')) >>> write(sample_buildout, 'buildout.cfg', ... """ ... [buildout] ... develop = ... %(test_dir)s/develop/vscodetest_pkg1 ... eggs = ... vscodetest_pkg1 ... zc.recipe.egg ... parts = vscode ... ... [vscode] ... recipe = collective.recipe.vscode ... eggs = ${buildout:eggs} ... """ % globals()) >>> output = system(buildout + ' -c buildout.cfg').lower() >>> vsc_settings = json.loads(read(settings_dir, 'settings.json')) >>> mappings['flake8-path'] not in vsc_settings True >>> len(vsc_settings[mappings['autocomplete-extrapaths']]) == 3 True
Contributors
Md Nazrul Islam<email2nazrul@gmail.com>, Original Author.
Matteo Parrucci
Changelog
0.1.9 (2023-06-30)
Add option robot-enabled (default false) to enable support for Robot Framework Language Server [datakurre]
0.1.8 (2021-10-28)
Change languageserver to Pylance (Microsoft no longer works)
Default to generating .env file to aid in debugging
Options are removed. jedi-path
vsintellicode.python.completionsEnabled is no longer part of VS code settings.
0.1.7 (2021-06-23)
fix vscode debugger by including terminal.integrated.env.* settings and zc.recipe.egg in paths.
0.1.6 (2020-07-15)
Auto find all eggs for all recipes so eggs argument no longer required. [djay]
Document how to automatically include the vscode recipe in all your buildouts [djay]
Added python.analysis.extraPaths which Microsoft language server/Pylance use to find eggs [djay]
If jedi-enabled is off ensure “python.languageServer” is set to ‘Microsoft’ and ‘vsintellicode.python.completionsEnabled’ is turned on [djay]
0.1.5 (2020-06-26)
Issue#10 don’t ignore html files [MrTango]
0.1.4 (2019-05-28)
Issue#3 Fixed typo [parruc]
Issue#4 Documented isort [parruc]
Issue#5 Automatic .env file generation [parruc]
0.1.3 (2019-03-12)
Bug fixes
0.1.2 (2019-02-14)
New features
default files.associations and files.exclude for python file now will be automatically included if those are not in existing settings.json
Bug fixes
Normally buildout removed generated file/directory first if exists, that’s why previously settings.json file removed and ultimately existing settings were lost! [nazrulworld]
0.1.1 (2019-02-11)
Bug fixes
Issue#1 pep8 enabling configuration added even not mentioned in buildout
Open existing settings file (mode was missing while opening file)
0.1.0 (2019-02-10)
Initial release. [nazrulworld]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for collective.recipe.vscode-0.1.9.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 77bee278697a286dede166f974196e460a97ee0f40cc914673e56588e44188fe |
|
MD5 | 3bc8cc21b1978590e9aba247e56003dd |
|
BLAKE2b-256 | dfe7c98ce7b933d9f0a75cb2265e1428ee166f4b740e029efc8d0cca748f56c5 |
Hashes for collective.recipe.vscode-0.1.9-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d04bcfd18bd511c210740ca9681ebb5cbcf779549d3532207d16278499c5cfe4 |
|
MD5 | 0e777b9338aad975e4d3bb846ceccc7a |
|
BLAKE2b-256 | 607acfa6a6feaaab5cf578aa6699b3d8f74713913fb8685def334b675384e20c |