Skip to main content

Visual Studio Code configuration for buildout-based Python projects

Project description

Package Status Travis Build Status Test Coverage Python Versions Latest Version License https://img.shields.io/badge/code%20style-black-000000.svg

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

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

Changelog

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)

0.1.4 (2019-05-28)

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

0.1.0 (2019-02-10)

  • Initial release. [nazrulworld]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

collective.recipe.vscode-0.1.8.tar.gz (20.7 kB view details)

Uploaded Source

Built Distribution

collective.recipe.vscode-0.1.8-py2.py3-none-any.whl (21.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file collective.recipe.vscode-0.1.8.tar.gz.

File metadata

  • Download URL: collective.recipe.vscode-0.1.8.tar.gz
  • Upload date:
  • Size: 20.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.7.8

File hashes

Hashes for collective.recipe.vscode-0.1.8.tar.gz
Algorithm Hash digest
SHA256 17820774be647b58b561326a3bb4a4c12180ea1a31ba39a05aeebb6f1aa3476b
MD5 b9e41b4e926faa1a1229593f9bba2355
BLAKE2b-256 82b9972f8e1e14d2617867f57b8ecf609b62bce4e114ea608d32355d99a368de

See more details on using hashes here.

File details

Details for the file collective.recipe.vscode-0.1.8-py2.py3-none-any.whl.

File metadata

  • Download URL: collective.recipe.vscode-0.1.8-py2.py3-none-any.whl
  • Upload date:
  • Size: 21.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.7.8

File hashes

Hashes for collective.recipe.vscode-0.1.8-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 855a2a66151ab7b2a60a9fbdc3b62a431e10c2d9813992e421b878a7b0ad75d3
MD5 cd13a1c7336f424ced0de08de013a3c1
BLAKE2b-256 d5389367fb53a4919f3d3597aaf1f507c4b14a67ce989e0eb7b44072e0d2379c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page