You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
GitHub Copilot offers much more than just code suggestions. As a Software Engineer, you often need to understand existing code and improve it with documentation, tests, and automation.
In this module, you'll learn how to leverage GitHub Copilot's advanced capabilities to provide automated code reviews and generate complex code autonomously and asynchronously.
In this module, you’ll explore the advanced features of GitHub Copilot, enabling you to interactively work with your code while applying suggestions and insights more effectively.
This module will be updated periodically to include new general availability features and improvements. Currently, this module can be completed in about 20 minutes.
Using a Python-based HTTP API, you’ll make modifications, fix bugs, create documentation, and write tests for a new endpoint that you’ll implement.
</header>
By the end of this module, you’ll be able to:
- **Who this is for**: Developers, DevOps Engineers, Software development managers, Testers.
- **What you'll learn**: Using Advanced GitHub Copilot features to test, document, and work with code.
- **What you'll build**: A new HTTP API route, along with documentation and tests to verify its correctness.
- **Prerequisites**: GitHub Copilot is available to use for free, sign up for [GitHub Copilot](https://gh.io/copilot).
- **Timing**: This module can be completed in under an hour.
- Assign GitHub Copilot as a reviewer for fast feedback on your code changes.
By the end of this module, you'll acquire the skills to be able to:
## 📖 Prerequisite reading
- Use advanced GitHub Copilot features like inline chat, slash commands, and agents.
- Interact with GitHub Copilot with deeper context on your project and ask questions about it.
## Prerequisite reading:
- [Introduction to prompt engineering with GitHub Copilot](https://learn.microsoft.com/training/modules/introduction-prompt-engineering-with-github-copilot//?WT.mc_id=academic-113596-abartolo)
- [Using GitHub Copilot with JavaScript](https://learn.microsoft.com/training/modules/introduction-copilot-javascript/?WT.mc_id=academic-113596-abartolo)
## Requirements
## 📋 Requirements
1. Enable your [GitHub Copilot service](https://github.com/github-copilot/signup)
1. Open [this repository with Codespaces](https://codespaces.new/MicrosoftDocs/mslearn-advanced-copilot)
## 💪🏽 Exercise
1. Open [this repository with Codespaces](https://codespaces.new/github-samples/node-recipe-app?quickstart=1)
**Right click the following Codespaces button to open your Codespace in a new tab**
[](https://codespaces.new/MicrosoftDocs/mslearn-copilot-codespaces-python)
The current API is not exposing country/{country} which needs to be implemented to list cities. The route should allow only GET HTTP requests with a JSON response providing information from the historical high and low for that country, city, and given month.
As with any implementation, this addition should include at least one test function to work with the pytest runner and test framework.
### 🛠 Step 1: Add a new route
In our first exercise we will create a new route in our API. Go to the main.py file, and by using the inline chat with the following command `ctrl` + `i` (on Windows) or `cmd` + `i`(on Mac) ask GitHub Copilot to help you create a new API that shows you the cities of a country.
Use the following prompt in inline-chat:
[](https://codespaces.new/github-samples/node-recipe-app?quickstart=1)
```
Create a new route that exposes the cities of a country.
```
_Note: if you have an existing Codespace with this project, please create a new one for this module._
This prompt should give you something similar like this:
This application is a recipe app that allows users to create, edit, and read recipes. By default, there are notable missing features including the ability to delete and search recipes.
## 🧑💻 Section 1: Copilot Code Review
```python
# Create a new route that exposes the cities of a country:
@app.get('/countries/{country}')
def cities(country: str):
return list(data[country].keys())
**🎯 Learning Goals**
```
- Be able to trigger code reviews in your code editor.
- Request code reviews on GitHub.com.
> [!NOTE]
> Try your new route and refine your prompt until the result is as desired.
Once your Codespace launches, you'll have a fully functional development environment with the entire repository preloaded.
### 🔎 Step 2: Create a test
Now that you have created a new route, let's create a test with Copilot Chat for this route that uses Spain as the country. Remember to select your code and ask Copilot Chat to help you with this specific API that we just have created.
Open the `src/routes.js` file. Just above the final line where the router is exported, add the following code:
Use the following prompt with GitHub Copilot Chat:
```
/tests help me to create a new test for this route that uses Spain as the country.
Once Copilot has helped you to create your test, try it. If this is not functioning as expected, feel free to share those details with Copilot in the chat. For example:
```
This test is not quite right, it is not including cities that doesn't exist. Only Seville is part of the API.
```
It should give you another solution. Keep trying until you achieve the desired result.
### 🐍 Step 3: Use an agent to write the project
During this step we will be using an agent (workspace) to write the project documentation on how to run this project. In the GitHub Copilot Chat, we will try the following prompt:
`> @workspace help me to use an agent to write the project documentation on how to run it .`
Finally, verify the new endpoint is working by trying it out by going to the `/docs` endpoint and confirming that the endpoint shows up.
_Note: this code has at least one logic bug and at least one area where it is inefficient. That's ok! Copilot should help us identify these improvements._
Open your source control sidebar and then request a code review from Copilot in your IDE. After a few seconds, Copilot will create inline comments, if any, in your editor.
### 💡 Step 4: Using Slash Commands

Now that you've used GitHub Copilot to generate and explain code, you can also explore some other alternative approaches to perform developer tasks. These extra challenges will help you dive deeper into other GitHub Copilot features in addition to the ones you already know. For these extra challenges, you will use the Chat interface. Click on the GitHub Copilot Chat icon on the left sidebar if you don't have it open yet.
You can choose to apply the suggested change directly, or discard it if preferred. In this case, Copilot has 2 different comments for this piece of code — applying or discarding will load the second comment. You can also toggle between them using the arrow icons in the top-right of the comment box.
🚀 Congratulations, through the exercise, you have used GitHub Copilot with many different features that will allow you to work better with different projects. You interactively used some features to write tests, documentation, and find out more about existing code.

## Legal Notices
Remember, Copilot is nondeterministic so you may have different suggestions. Apply all changes and commit your work.
Microsoft and any contributors grant you a license to the Microsoft documentation and other content
in this repository under the [Creative Commons Attribution 4.0 International Public License](https://creativecommons.org/licenses/by/4.0/legalcode),
see the [LICENSE](LICENSE) file, and grant you a license to any code in the repository under the [MIT License](https://opensource.org/licenses/MIT), see the
[LICENSE-CODE](LICENSE-CODE) file.
### Copilot Code Review on web and mobile
Microsoft, Windows, Microsoft Azure, and/or other Microsoft products and services referenced in the documentation
may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries.
The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks.
Microsoft's general trademark guidelines can be found at http://go.microsoft.com/fwlink/?LinkID=254653.
Copilot can also be assigned as a reviewer for pull requests on the GitHub website and via the GitHub mobile app. This allows you to get feedback on your code changes from Copilot directly in the context of your pull request. This feature requires a [paid license for GitHub Copilot](https://github.com/features/copilot#pricing).
Privacy information can be found at https://privacy.microsoft.com/en-us/
## 📖 Discover more
Microsoft and any contributors reserve all other rights, whether under their respective copyrights, patents,
or trademarks, whether by implication, estoppel, or otherwise.
GitHub Copilot is constantly evolving with new features and improvements. To stay updated on the latest developments, check out the [GitHub Changelog](https://github.blog/changelog/?label=copilot). This module will be updated as new features enter general availability.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.