From 33803a8cc465c458817abeb4e0b643a535ad79e7 Mon Sep 17 00:00:00 2001 From: Sophie <29382425+sophietheking@users.noreply.github.com> Date: Fri, 27 Jun 2025 09:32:38 +0200 Subject: [PATCH 1/4] [Improvement]: Clarify git handling of .git-blame-ignore-revs file and blame view (#56328) --- .../using-files/viewing-and-understanding-files.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/repositories/working-with-files/using-files/viewing-and-understanding-files.md b/content/repositories/working-with-files/using-files/viewing-and-understanding-files.md index 77923b4d7e4e..b36e7f514bc0 100644 --- a/content/repositories/working-with-files/using-files/viewing-and-understanding-files.md +++ b/content/repositories/working-with-files/using-files/viewing-and-understanding-files.md @@ -66,7 +66,7 @@ All revisions specified in the `.git-blame-ignore-revs` file, which must be in t 1. Commit and push the changes. -Now when you visit the blame view, the listed revisions will not be included in the blame. You'll see an **Ignoring revisions in .git-blame-ignore-revs** banner indicating that some commits may be hidden: +In the blame view, revisions are excluded only if the commit **introduced new lines**. If the commit was the last to **modify** a line, it will still appear in blame. You'll see an "Ignoring revisions in .git-blame-ignore-revs" banner indicating that some commits may be hidden: From 6cb0723b2967faaa845e23e99ba3d0480b5b6b15 Mon Sep 17 00:00:00 2001 From: mc <42146119+mchammer01@users.noreply.github.com> Date: Fri, 27 Jun 2025 09:11:56 +0100 Subject: [PATCH 2/4] YOLO merge - escape apostrophe --- .../index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilites/index.md b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilites/index.md index dd33a3f6ec15..1c34afbd11dd 100644 --- a/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilites/index.md +++ b/content/code-security/securing-your-organization/understanding-your-organizations-exposure-to-vulnerabilites/index.md @@ -1,7 +1,7 @@ --- title: 'Understanding your organization''s exposure to vulnerabilities' shortTitle: Exposure to vulnerabilities -intro: 'Understanding your organization’s exposure to vulnerable dependencies is crucial for identifying and prioritizing security risks. This awareness allows you to prioritize remediation efforts, reduce the likelihood of security breaches, protect sensitive data, and maintain the overall integrity and reputation of the organization.' +intro: 'Understanding your organization''s exposure to vulnerable dependencies is crucial for identifying and prioritizing security risks. This awareness allows you to prioritize remediation efforts, reduce the likelihood of security breaches, protect sensitive data, and maintain the overall integrity and reputation of the organization.' versions: feature: dependabot-metrics topics: From 81ff238ec2748b01bd98e10ad6fd42368c24c287 Mon Sep 17 00:00:00 2001 From: Sophie <29382425+sophietheking@users.noreply.github.com> Date: Fri, 27 Jun 2025 10:41:47 +0200 Subject: [PATCH 3/4] [Improvement]: Update GitHub Copilot code review documentation, "Reviewing changes" section (#56331) --- .../code-review/vscode-review-button.png | Bin 0 -> 53802 bytes .../using-copilot-code-review.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 assets/images/help/copilot/code-review/vscode-review-button.png diff --git a/assets/images/help/copilot/code-review/vscode-review-button.png b/assets/images/help/copilot/code-review/vscode-review-button.png new file mode 100644 index 0000000000000000000000000000000000000000..5682f8e10d52cd95902bdf9d4c6bd2f2ac3e4d9e GIT binary patch literal 53802 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

C!pm>dw=`viJIiyq^ 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%0A6gS9D5W!Ii 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 e-(I@KJCyexfgU&!7z_7+KZ Date: Fri, 27 Jun 2025 09:50:28 +0100 Subject: [PATCH 4/4] Add guide: "Learning a new programming language with GitHub Copilot" (#56258) --- CHANGELOG.md | 8 +- ...king-github-copilot-questions-in-github.md | 2 +- ...ng-github-copilot-questions-in-your-ide.md | 14 +- ...mparing-ai-models-using-different-tasks.md | 4 +- ...ode-to-a-different-programming-language.md | 2 +- content/copilot/tutorials/index.md | 2 +- ...rogramming-language-with-github-copilot.md | 178 ++++++++++++++++++ .../using-copilot-to-migrate-a-project.md | 2 +- ...sing-github-copilot-to-explore-projects.md | 2 +- data/code-languages.yml | 3 + 10 files changed, 199 insertions(+), 18 deletions(-) create mode 100644 content/copilot/tutorials/learning-a-new-programming-language-with-github-copilot.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f4bde9dfc26..3453facddae1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ **13 June 2025** -We've published a new article for people learning to code: "[Developing your project locally](https://docs.github.com/en/get-started/learning-to-code/developing-your-project-locally)." +We've published a new article for people learning to code: "[Developing your project locally](https://docs.github.com/get-started/learning-to-code/developing-your-project-locally)." This tutorial helps learners gain core skills needed to set up any project locally by working through an example client-side application using HTML, CSS, and JavaScript. The goal is to help new coders use GitHub tools to recognize patterns across different technologies and build confidence in their ability to set up any project locally. @@ -12,19 +12,19 @@ This tutorial helps learners gain core skills needed to set up any project local To manage System for Cross-domain Identity Management (SCIM) integration with confidence, customers need to understand the different types of deprovisioning, the actions that trigger them, and their options for reinstating deprovisioned users. -We've published a new article to answer questions around suspending and reinstating Enterprise Managed Users, or users where SCIM is enabled on GitHub Enterprise Server: "[Deprovisioning and reinstating users with SCIM](https://docs.github.com/en/enterprise-cloud@latest/admin/managing-iam/provisioning-user-accounts-with-scim/deprovisioning-and-reinstating-users)". +We've published a new article to answer questions around suspending and reinstating Enterprise Managed Users, or users where SCIM is enabled on GitHub Enterprise Server: "[Deprovisioning and reinstating users with SCIM](https://docs.github.com/enterprise-cloud@latest/admin/managing-iam/provisioning-user-accounts-with-scim/deprovisioning-and-reinstating-users)".


**11 June 2025** -We've added a new scenario-based guide for the Builder persona: "[Using Copilot to explore a codebase](https://docs.github.com/en/copilot/using-github-copilot/guides-on-using-github-copilot/using-copilot-to-explore-a-codebase)." +We've added a new scenario-based guide for the Builder persona: "[Using Copilot to explore a codebase](https://docs.github.com/copilot/tutorials/using-copilot-to-explore-a-codebase)."
**24 April 2025** -To help learners feel confident they are building real coding skills while using Copilot, we published [Setting up Copilot for learning to code](https://docs.github.com/en/get-started/learning-to-code/setting-up-copilot-for-learning-to-code). +To help learners feel confident they are building real coding skills while using Copilot, we published [Setting up Copilot for learning to code](https://docs.github.com/get-started/learning-to-code/setting-up-copilot-for-learning-to-code). This article helps learners take their first steps in coding with Copilot acting as a tutor, rather than a code completion tool. Configuring Copilot for learning emphasizes skill development and gives learners a way to use Copilot as a daily tool to foster learning and coding independence. diff --git a/content/copilot/how-tos/chat/asking-github-copilot-questions-in-github.md b/content/copilot/how-tos/chat/asking-github-copilot-questions-in-github.md index 69a5c2deda53..b7fa5ae65c42 100644 --- a/content/copilot/how-tos/chat/asking-github-copilot-questions-in-github.md +++ b/content/copilot/how-tos/chat/asking-github-copilot-questions-in-github.md @@ -401,4 +401,4 @@ To give feedback about {% data variables.copilot.copilot_chat_short %} in genera * [AUTOTITLE](/copilot/github-copilot-chat/copilot-chat-in-ides/using-github-copilot-chat-in-your-ide) * [AUTOTITLE](/copilot/using-github-copilot/asking-github-copilot-questions-in-github-mobile) -* [AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/using-copilot-to-explore-a-codebase) +* [AUTOTITLE](/copilot/tutorials/using-copilot-to-explore-a-codebase) diff --git a/content/copilot/how-tos/chat/asking-github-copilot-questions-in-your-ide.md b/content/copilot/how-tos/chat/asking-github-copilot-questions-in-your-ide.md index 20e884c305b0..f8bf904bca87 100644 --- a/content/copilot/how-tos/chat/asking-github-copilot-questions-in-your-ide.md +++ b/content/copilot/how-tos/chat/asking-github-copilot-questions-in-your-ide.md @@ -33,7 +33,7 @@ You can ask {% data variables.copilot.copilot_chat_short %} to give you code sug ![Screenshot of the '{% data variables.copilot.copilot_chat_short %}' button, highlighted with a dark orange outline.](/assets/images/help/copilot/vsc-copilot-chat-icon.png) -1. Enter a prompt in the prompt box, or click one of the suggested prompts. For an introduction to the kinds of prompts you can use, see [AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/getting-started-with-prompts-for-copilot-chat). +1. Enter a prompt in the prompt box, or click one of the suggested prompts. For an introduction to the kinds of prompts you can use, see [AUTOTITLE](/copilot/get-started/getting-started-with-prompts-for-copilot-chat). 1. Evaluate {% data variables.product.prodname_copilot_short %}'s response, and make a follow-up request if needed. @@ -43,7 +43,7 @@ You can ask {% data variables.copilot.copilot_chat_short %} to give you code sug ## Using keywords in your prompt -You can use special keywords to help {% data variables.product.prodname_copilot_short %} understand your prompt. For examples, see [AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/getting-started-with-prompts-for-copilot-chat). +You can use special keywords to help {% data variables.product.prodname_copilot_short %} understand your prompt. For examples, see [AUTOTITLE](/copilot/get-started/getting-started-with-prompts-for-copilot-chat). ### Chat participants @@ -212,7 +212,7 @@ To leave feedback about the {% data variables.copilot.copilot_chat %} extension, You can ask {% data variables.copilot.copilot_chat_short %} to give you code suggestions, explain code, generate unit tests, and suggest code fixes. 1. In the {% data variables.product.prodname_vs %} menu bar, click **View**, then click **{% data variables.copilot.copilot_chat %}**. -1. In the {% data variables.copilot.copilot_chat_short %} window, enter a prompt, then press **Enter**. For example prompts, see [AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/getting-started-with-prompts-for-copilot-chat). +1. In the {% data variables.copilot.copilot_chat_short %} window, enter a prompt, then press **Enter**. For example prompts, see [AUTOTITLE](/copilot/get-started/getting-started-with-prompts-for-copilot-chat). 1. Evaluate {% data variables.product.prodname_copilot_short %}'s response, and submit a follow up prompt if needed. The response often includes interactive elements. For example, the response may include buttons to copy, insert, or preview the result of a code block. @@ -366,7 +366,7 @@ You can ask {% data variables.copilot.copilot_chat_short %} to give you code sug ![Screenshot of the {% data variables.copilot.copilot_chat %} icon in the Activity Bar.](/assets/images/help/copilot/jetbrains-copilot-chat-icon.png) -1. Enter a prompt in the prompt box. For example prompts, see [AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/getting-started-with-prompts-for-copilot-chat). +1. Enter a prompt in the prompt box. For example prompts, see [AUTOTITLE](/copilot/get-started/getting-started-with-prompts-for-copilot-chat). 1. Evaluate {% data variables.product.prodname_copilot_short %}'s response, and submit a follow up prompt if needed. @@ -482,7 +482,7 @@ You can ask {% data variables.copilot.copilot_chat_short %} to give you code sug 1. To open the chat view, click **Editor** in the menu bar, then click **{% octicon "copilot" aria-hidden="true" aria-label="copilot" %} {% data variables.product.prodname_copilot_short %}** then **Open Chat**. {% data variables.copilot.copilot_chat_short %} opens in a new window. -1. Enter a prompt in the prompt box. For example prompts, see [AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/getting-started-with-prompts-for-copilot-chat). +1. Enter a prompt in the prompt box. For example prompts, see [AUTOTITLE](/copilot/get-started/getting-started-with-prompts-for-copilot-chat). 1. Evaluate {% data variables.product.prodname_copilot_short %}'s response, and submit a follow up prompt if needed. @@ -558,13 +558,13 @@ You can ask {% data variables.copilot.copilot_chat_short %} to give you code sug 1. Enter a prompt in the prompt box, then press Enter. - For an introduction to the kinds of prompts you can use, see [AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/getting-started-with-prompts-for-copilot-chat). + For an introduction to the kinds of prompts you can use, see [AUTOTITLE](/copilot/get-started/getting-started-with-prompts-for-copilot-chat). 1. Evaluate {% data variables.product.prodname_copilot_short %}'s response, and make a follow up request if needed. ## Using keywords in your prompt -You can use special keywords to help {% data variables.product.prodname_copilot_short %} understand your prompt. For examples, see [AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/getting-started-with-prompts-for-copilot-chat). +You can use special keywords to help {% data variables.product.prodname_copilot_short %} understand your prompt. For examples, see [AUTOTITLE](/copilot/get-started/getting-started-with-prompts-for-copilot-chat). ### Slash commands diff --git a/content/copilot/tutorials/comparing-ai-models-using-different-tasks.md b/content/copilot/tutorials/comparing-ai-models-using-different-tasks.md index 2f594b4f7023..67a5c1023bf8 100644 --- a/content/copilot/tutorials/comparing-ai-models-using-different-tasks.md +++ b/content/copilot/tutorials/comparing-ai-models-using-different-tasks.md @@ -173,7 +173,7 @@ class Cart: Consider a scenario where you are implementing both unit tests and integration tests for an application. You want to ensure that the tests are comprehensive and cover any edge cases that you may and may not have thought of. -For a complete walkthrough of the scenario, see [AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/writing-tests-with-github-copilot). +For a complete walkthrough of the scenario, see [AUTOTITLE](/copilot/tutorials/writing-tests-with-github-copilot). ### Why {% data variables.copilot.copilot_claude_sonnet_35 %} is a good fit @@ -188,7 +188,7 @@ For a complete walkthrough of the scenario, see [AUTOTITLE](/copilot/using-githu Consider a scenario where you're modernizing a legacy COBOL application by rewriting it in Node.js. The project involves understanding unfamiliar source code, converting logic across languages, iteratively building the replacement, and verifying correctness through a test suite. -For a complete walkthrough of the scenario, see [AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/modernizing-legacy-code-with-github-copilot). +For a complete walkthrough of the scenario, see [AUTOTITLE](/copilot/tutorials/modernizing-legacy-code-with-github-copilot). ### Why {% data variables.copilot.copilot_claude_sonnet_37 %} is a good fit diff --git a/content/copilot/tutorials/copilot-chat-cookbook/refactoring-code/translating-code-to-a-different-programming-language.md b/content/copilot/tutorials/copilot-chat-cookbook/refactoring-code/translating-code-to-a-different-programming-language.md index 974caf818381..e15016617b4d 100644 --- a/content/copilot/tutorials/copilot-chat-cookbook/refactoring-code/translating-code-to-a-different-programming-language.md +++ b/content/copilot/tutorials/copilot-chat-cookbook/refactoring-code/translating-code-to-a-different-programming-language.md @@ -21,7 +21,7 @@ For ease of maintaining code, you might want to move code to a language that is {% data variables.product.prodname_copilot_short %} can help you translate code from one language to another. Translating a standalone file, such as a script, is straightforward. This process is described in this article. -Translating a project containing multiple files is a more complex process, and is described in [AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/using-copilot-to-migrate-a-project). +Translating a project containing multiple files is a more complex process, and is described in [AUTOTITLE](/copilot/tutorials/using-copilot-to-migrate-a-project). ## Example scenario diff --git a/content/copilot/tutorials/index.md b/content/copilot/tutorials/index.md index 7205c98edc36..e9c5b323e584 100644 --- a/content/copilot/tutorials/index.md +++ b/content/copilot/tutorials/index.md @@ -14,6 +14,7 @@ children: - /using-copilot-to-explore-a-codebase - /writing-tests-with-github-copilot - /refactoring-code-with-github-copilot + - /learning-a-new-programming-language-with-github-copilot - /modernizing-legacy-code-with-github-copilot - /using-copilot-to-migrate-a-project - /upgrading-java-projects-with-github-copilot @@ -21,4 +22,3 @@ children: redirect_from: - /copilot/using-github-copilot/guides-on-using-github-copilot --- - diff --git a/content/copilot/tutorials/learning-a-new-programming-language-with-github-copilot.md b/content/copilot/tutorials/learning-a-new-programming-language-with-github-copilot.md new file mode 100644 index 000000000000..b393afa0136e --- /dev/null +++ b/content/copilot/tutorials/learning-a-new-programming-language-with-github-copilot.md @@ -0,0 +1,178 @@ +--- +title: Learning a new programming language with GitHub Copilot +shortTitle: Learn a new language +intro: '{% data variables.copilot.copilot_chat %} can help you extend your programming skills by learning how to code in a new programming language.' +topics: + - Copilot +versions: + feature: copilot +--- + +## Introduction + +{% data variables.product.prodname_copilot %} can help you learn how to code: whether you have no prior programming experience, or when you are learning an additional programming language. This guide is all about the latter use case: you already have a good knowledge of how to code in one or more programming languages, but now you want to learn a new language. + +### Prerequisites + +This guide assumes that you know how to use {% data variables.copilot.copilot_chat_short %} and {% data variables.product.prodname_copilot_short %} code completion in your IDE. See [AUTOTITLE](/copilot/using-github-copilot/copilot-chat/asking-github-copilot-questions-in-your-ide) and [AUTOTITLE](/copilot/using-github-copilot/getting-code-suggestions-in-your-ide-with-github-copilot). + +## Start with the basics + +Use {% data variables.copilot.copilot_chat_short %} to research the basics of the new language. Find out how this language differs from the languages you already know. Ask {% data variables.product.prodname_copilot_short %} to tell you the main things you need to be aware of before you start coding in the new language. + +### Example prompts: language basics + +These are some prompts that you can use in {% data variables.copilot.copilot_chat_short %} to help you learn the basics of a new programming language: + + + +* `What is NEW-LANGUAGE best suited for? I am an experienced Python programmer, but I don't know anything about NEW-LANGUAGE.` + +* `What are the main ways in which NEW-LANGUAGE differs from other languages? Explain the most essential things I need to know as an experienced programmer who wants to learn to code in NEW-LANGUAGE.` + +* `How can I install NEW-LANGUAGE?` + +* `How does error handling work in NEW-LANGUAGE?` + +* `How do you manage dependencies and packages in NEW-LANGUAGE?` + +* `What are the most essential libraries or frameworks I should know about for NEW-LANGUAGE?` + +* `What testing frameworks does the NEW-LANGUAGE community typically use?` + +* `What are the biggest mistakes newcomers to NEW-LANGUAGE typically make with this language?` + +* `As an experienced programmer learning NEW-LANGUAGE, what are the things I should focus on first?` + +## Use {% data variables.product.prodname_copilot_short %} as your personal trainer + +{% data variables.product.prodname_copilot %} can write code for you. You can ask it to create chunks of code, functions, or even entire programs. However, when you are learning a new language, you should avoid relying on {% data variables.product.prodname_copilot_short %} to write much of the code for you—especially if you accept the code it suggests without making sure you understand it. If you don't know the language, you won't know if the code {% data variables.product.prodname_copilot_short %} suggests is as good as it could be. Instead, you should treat {% data variables.product.prodname_copilot_short %} as your personalized training assistant. + +When you ask {% data variables.product.prodname_copilot_short %} how to code something specific in the new language, you should ask it to explain the code it suggests. If you don't completely understand the code, or {% data variables.product.prodname_copilot_short %}'s description of it, ask for a simplified explanation—or ask for more detail—until you are sure you understand the code. Always avoid using any code that you are not completely confident that you understand. + +### Example prompts: asking for an explanation + + + +* `Explain your previous suggestion in more detail. I am new to NEW-LANGUAGE and I don't understand the code you suggested.` + +* ``Show me how to write the following Ruby code in NEW-LANGUAGE: `people_over_50 = people.select { |person| person.age > 50 }`. Explain each part of the NEW-LANGUAGE code that you suggest.`` + +* `Add comprehensive comments to this NEW-LANGUAGE file to explain what each part of the code does.` + +## Write a simple program in the new language + +To get started, write a simple program that you would be able to write easily in a language you already know. Ask {% data variables.product.prodname_copilot_short %} for help. If you prefer, you can ask {% data variables.product.prodname_copilot_short %} to write a very simple program for you, just to get you started. You can then examine the code, learn how it works, and then extend the program yourself. + +### Example prompts: writing a simple program + + + +* `Show me the Rust code for a simple, useful command line tool that asks for user input and returns some useful information based on what was entered.` + +* `Comment the suggested code more thoroughly. I want to understand what every part of this code does.` + +* `Give me the code for a very small Android app written in Kotlin.` + +* `Suggests ways I could enhance this app.` + +### Use comments and {% data variables.product.prodname_copilot_short %} code completion + +As an alternative to asking {% data variables.copilot.copilot_chat_short %} to suggest the basic code for a new program, you can write comments in the editor and see what suggestions {% data variables.product.prodname_copilot_short %} code completion offers. + +For example: + +1. In your IDE, create a file with an appropriate file name extension for the language you are using. For example, if you are learning Rust, create a file called `example.rs`. +1. Copy and paste the following comment lines. + + ```rust copy + // NEW-LANGUAGE command line program to find the day of the week for a date. + // The program does the following: + // Prompt user to input string in format YYYYMMDD + // Parse the string to check that it is a valid date. + // If it's not, print an error message and exit. + // Calculate the day of the week for the given date. + // Print the day of the week to the user. + ``` + +1. If necessary, change the comment syntax to match the language you are using. +1. Change `NEW-LANGUAGE` to the name of the language you are using. This, and the file name extension, will tell {% data variables.product.prodname_copilot_short %} which language to use. +1. Press return and tab to see and accept the code completion suggestions that {% data variables.product.prodname_copilot_short %} offers. Continue accepting suggestions until you have a complete program. +1. Read through the code to see how it works. If you don't understand any part of the code, ask {% data variables.product.prodname_copilot_short %} to explain it. For example: + + 1. Select one or more lines of code that you don't understand. + 1. **In {% data variables.product.prodname_vscode_shortname %}:** + + Right-click the selected code and choose **{% data variables.product.prodname_copilot_short %}** > **Explain**. + + **In JetBrains IDEs:** + + Right-click the selected code and choose **{% data variables.product.prodname_copilot %}** > **Explain This**. + + **In {% data variables.product.prodname_vs %}:** + + Open the {% data variables.copilot.copilot_chat_short %} panel and enter the prompt `Explain this code`. + +## Ask {% data variables.product.prodname_copilot_short %} specific questions + +While you are learning a new language, you should work on small units of code that perform a specific task. Ask {% data variables.product.prodname_copilot_short %} well-defined, narrowly scoped questions to help you become familiar with the syntax and idioms of the new language. + +### Example prompts: specific questions + + + +* `Explain all of the various ways that conditionals can be coded in NEW-LANGUAGE.` + +* ``In JavaScript I'd write: `The ${numCats === 1 ? 'cat is' : 'cats are'} hungry.`. How do I write this in NEW-LANGUAGE?`` + +* `In NEW-LANGUAGE, how do I convert a string to all lowercase?` + +* `What is the equivalent of num++ in NEW-LANGUAGE?` + +* `How do I run a program written in the NEW-LANGUAGE programming language?` + +* `How can I compile a single executable file for my NEW-LANGUAGE project, that I can distribute as a release?` + +## Convert existing code to the new language + +One effective way of leveraging your existing programming knowledge is to take some code you are familiar with in one language, convert it to the new language, and then examine how the same operation is done in the new language. + +1. Find a self-contained piece of code. For example, a function. +1. Ask {% data variables.copilot.copilot_chat_short %} to convert it into the language you are learning. +1. Copy and paste the suggested code into a new file in your editor. +1. View the two pieces of code side by side and analyze how the same operation is done in the new language. What are the similarities and differences? +1. Get {% data variables.product.prodname_copilot_short %} to explain any of the code you don't understand. + +## Read existing code in the new language + +After you feel comfortable with the basics of the new language, spend time reading existing code written in that language. + +Find a project that uses the new language and take a look at the code. Open a file and ask {% data variables.copilot.copilot_chat_short %} for a brief overview of the purpose of the file. Then read through the code line by line. Do you understand the techniques that have been used? Do you know how the library and built-in functions work? Can you follow the data flow through the code? + +Ask {% data variables.product.prodname_copilot_short %} to explain any parts of the code that you don't understand. + +When you have finished reading through the code, ask {% data variables.product.prodname_copilot_short %} whether it can suggest any ways to improve the code. + +## Avoid assuming that {% data variables.product.prodname_copilot_short %} is always right + +{% data variables.product.prodname_copilot_short %} is a tool that can help you learn a new language, but—like all AI assistants—it is not infallible. It can make mistakes, and it can suggest code that is not optimal. + +{% data variables.product.prodname_copilot_short %} is trained on a large body of code but, for each language, the quality of suggestions you receive may depend on the volume and diversity of training data for that language. For example, JavaScript is well-represented in public repositories and {% data variables.product.prodname_copilot_short %} will therefore typically be able to provide accurate and helpful suggestions. The quality of {% data variables.product.prodname_copilot_short %}'s suggestions may be lower for languages that are less well-represented in public repositories. + +Always check the code that {% data variables.product.prodname_copilot_short %} suggests, and make sure you understand it before you use it. When you're checking code suggested by {% data variables.product.prodname_copilot_short %}, you should look for ways you could make the code more performant, simpler, or easier to maintain. + +If you think {% data variables.product.prodname_copilot_short %} has not suggested the best way of coding something you can ask it to try a different approach. + +If you run the code and it generates an error, give {% data variables.product.prodname_copilot_short %} the details of the error and ask it to fix the code. + +You should also check that {% data variables.product.prodname_copilot_short %} is following your coding style guidelines. If it is not, you can alter the repository's custom instructions to prompt {% data variables.product.prodname_copilot_short %} to adhere to your guidelines in future. See [AUTOTITLE](/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot). + +### Example prompts: checking your work + + + +* `Check this code for syntax errors.` + +* `Assess whether this code is optimally performant.` + +* `Suggest alternative ways this code could have been written.` diff --git a/content/copilot/tutorials/using-copilot-to-migrate-a-project.md b/content/copilot/tutorials/using-copilot-to-migrate-a-project.md index 8fb2696d4212..4be91e5267d5 100644 --- a/content/copilot/tutorials/using-copilot-to-migrate-a-project.md +++ b/content/copilot/tutorials/using-copilot-to-migrate-a-project.md @@ -71,7 +71,7 @@ Assuming you've already familiarized yourself with the existing project, a good If you think a change suggested by {% data variables.product.prodname_copilot_short %} is not right in some way, ask for an alternative suggestion. 1. As soon as you've migrated a component to a state that you can run, check that it works as expected. If it generates an error, copy the error into the {% data variables.copilot.copilot_chat_short %} view, and ask {% data variables.product.prodname_copilot_short %} to help you fix it. -1. After you've completed the initial conversion, use {% data variables.product.prodname_copilot_short %} to help you refactor the code in the new language. For more information, see [AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/refactoring-code-with-github-copilot). +1. After you've completed the initial conversion, use {% data variables.product.prodname_copilot_short %} to help you refactor the code in the new language. For more information, see [AUTOTITLE](/copilot/tutorials/refactoring-code-with-github-copilot). ## Example: migrating a PHP project to Python diff --git a/content/get-started/exploring-projects-on-github/using-github-copilot-to-explore-projects.md b/content/get-started/exploring-projects-on-github/using-github-copilot-to-explore-projects.md index 791859858c33..a8628a2df6f5 100644 --- a/content/get-started/exploring-projects-on-github/using-github-copilot-to-explore-projects.md +++ b/content/get-started/exploring-projects-on-github/using-github-copilot-to-explore-projects.md @@ -40,7 +40,7 @@ When you’re exploring a project, you might want to understand the contents of ## Further reading -* [AUTOTITLE](/copilot/using-github-copilot/guides-on-using-github-copilot/using-copilot-to-explore-a-codebase) +* [AUTOTITLE](/copilot/tutorials/using-copilot-to-explore-a-codebase) ## Next steps diff --git a/data/code-languages.yml b/data/code-languages.yml index 9cc5469ea269..e6b3e17cf852 100644 --- a/data/code-languages.yml +++ b/data/code-languages.yml @@ -55,6 +55,9 @@ python: ruby: name: Ruby comment: number +rust: + name: Rust + comment: number scss: name: SCSS comment: slash