Contributing to Go plugin for VS Code

Welcome, and thank you for your interest in contributing to the Go plugin for VS Code!

There are many ways that you can contribute, beyond writing code. The goal of this document is to provide a high-level overview of how you can get involved.

Contributing Fixes

If you are interested in writing code to fix issues, first look at the issues with the help-wanted label. They should have the context and code pointers needed to get started. If not, then feel free to ask for some, and we will be happy to provide any guidance you need.

To get started with the code, please see Building, Debugging and Sideloading the extension in Visual Studio Code in the wiki.

A few labels other than help-wanted that might be of interest to you are

  • good-first-issue These are issues that have fixes with the lowest barrier of entry.
  • engineering-debt These are issues tracking the work that would improve the project structure, coding standards, test coverage etc. If you have any Javascript or Typescript background, then these are the issues you can jump in and start contributing immediately.
  • under-discussion These are issues where you as a Go developer can jump in and provide your insights on the discussion regarding how a problem should be solved or help in replicating the problem.

Contributor License Agreement

You must sign a Contribution License Agreement (CLA) before your PR will be merged. This a one-time requirement for Microsoft projects in GitHub. You can read more about the Microsoft Contribution License Agreement (CLA) at https://cla.microsoft.com.

However, you don't have to do this up-front. You can simply clone, fork, and submit your pull-request as usual.

When your pull-request is created, a bot will evaluate whether you have signed the CLA. If required, the bot will comment on the pull request, including a link to accept the agreement.

Signing the CLA might sound scary but it's actually very simple and can be done in less than a minute :)

Contributing to snippets

The go.json in this repo contains all the Code Snippets that is provided by this plugin. If you want to add more snippets, please create an issue first. If this issue gets atleast 10 upvotes, we will then consider adding your snippets to the plugin.

We have this policy in place because excessive snippets will hinder the normal coding by adding unexpected entries in the auto-completion widget. Therefore, we want to add a snippet only after atleast 10 users from the community have upvoted it.

Asking Questions

Have a question? First, ask away on Gitter or on the vscode channel in the Gophers Slack.

The active community will be eager to assist you. If you don't get answers there, then feel free to ask your question by opening an issue here. Your well-worded question will serve as a resource to others searching for help.

Reporting Issues

Have you identified a reproducible problem? Have a feature request? We want to hear about it! Here's how you can make reporting your issue as effective as possible.

Look For an Existing Issue

Before you create a new issue, please do a search in open issues to see if the issue or feature request has already been filed.

Be sure to scan through the most popular issues.

If you find your issue already exists, make relevant comments and add your reaction. Use a reaction in place of a “+1” comment:

  • 👍 - upvote
  • 👎 - downvote

Subscribe to such issues so that you are kept up to date about the progress.

If you cannot find an existing issue that describes your bug or feature, create a new issue using the guidelines below.

Writing Good Bug Reports and Feature Requests

File a single issue per problem and feature request. Do not enumerate multiple bugs or feature requests in the same issue.

Do not add your issue as a comment to an existing issue unless it's for the identical input. Many issues look similar, but have different causes.

The more information you can provide, the more likely someone will be successful reproducing the issue and finding a fix.

Please include the following with each issue:

  • Version of VS Code, the Go plugin and Go

  • OS/Platform you are working on

  • Run the command `Preferences: Open Settings (JSON) to see the entire list of settings you have added/edited. Share any Go related settings from here.

  • Reproducible steps (1... 2... 3...) that cause the issue

  • What you expected to see, versus what you actually saw

  • Images, animations, or a link to a video showing the issue occurring

  • A code snippet that demonstrates the issue or a link to a code repository the developers can easily pull down to recreate the issue locally

    • Note: Because the developers need to copy and paste the code snippet, including a code snippet as a media file (i.e. .gif) is not sufficient.
  • Errors from the Dev Tools Console (open from the menu: Help > Toggle Developer Tools -> Console)

  • If you have enabled the use of language server, then share any errors from the logs (open from the menu: View > Output -> select language server from the drop down on the to right corner of the output panel)

Final Checklist

Please remember to do the following:

  • [ ] Search the issue repository to ensure your report is a new issue

  • [ ] Simplify your code around the issue to better isolate the problem

Don‘t feel bad if others can’t reproduce the issue right away. They will simply ask for more information!

Follow Your Issue

Once submitted, your report will go into the issue tracking workflow. Be sure to understand what will happen next, so you know what to expect, and how to continue to assist throughout the process.

Automated Issue Management

We use a bot to help us manage issues. This bot currently:

  • Automatically closes any issue marked needs-more-info if there has been no response in past 7 days.
  • Automatically locks issues 45 days after they are closed.

If you believe the bot got something wrong, please open a new issue and let us know.

Thank You!

Your contributions to open source, large or small, make great projects like this possible. Thank you for taking the time to contribute.