The Dev Insights
The Dev Insights
GitHub Copilot X Tricks I Wish I Knew Sooner
Back to Blog
Tech TrendsOctober 13, 202510 min read

GitHub Copilot X Tricks I Wish I Knew Sooner

Tech TrendsOctober 13, 202510 min read

GitHub Copilot X is a game-changer, but it's not magic; let me show you some advanced techniques that seriously boosted my productivity.

Alright, grab a coffee (or a pint, depending on the time), and let's chat about GitHub Copilot X. I've been using it pretty heavily for the last few months, and honestly, it's changed how I code. But it's not just about accepting every suggestion it throws at you. To really get the most out of it, you need to understand its quirks and learn some advanced techniques. This tripped me up at first, but after some experimentation, I realised how powerful it could be.

Why Bother with Advanced Techniques?

Look, here's the thing: Copilot's great out of the box. It saves time on boilerplate and simple tasks. But if you're working on complex projects, relying on the basic features will only get you so far. You'll end up spending more time correcting its mistakes than actually coding. These advanced techniques let you steer Copilot in the right direction, ensuring it generates code that's not just syntactically correct but also aligned with your project's architecture and coding style.

Plus, let's be real, AI-assisted coding is the future. By 2025, it'll be even more integrated into our workflows. Learning these skills now will give you a serious edge.

My First Mistake: Trusting It Too Much

I jumped in headfirst, accepting almost every suggestion. Big mistake. I quickly realised that Copilot wasn't always producing the best code, just the easiest code. It was often repetitive and didn't consider the bigger picture. I ended up with a codebase that was functional but messy and hard to maintain. That's when I knew I needed to change my approach.

Technique 1: Prompt Engineering – Guiding the AI

This is probably the most important thing I've learned. Copilot responds to prompts, just like any other AI model. The better your prompts, the better the output. It's all about giving it enough context to understand what you want.

Be Specific

Don't just write a vague comment like // Create a function to fetch data. Instead, be precise:

// Create a function called fetchData that fetches data from the /api/users endpoint and returns a JSON object

See the difference? The more information you provide, the better Copilot can understand your intentions.

Use Docstrings

Docstrings are your friend. They not only document your code but also provide valuable context for Copilot. I make it a habit to write detailed docstrings before writing the actual code. Copilot can then use this information to generate the function body.

python
def calculate_average(numbers: list[float]) -> float:
    """Calculates the average of a list of numbers.

    Args:
        numbers: A list of floating-point numbers.

    Returns:
        The average of the numbers in the list. Returns 0 if the list is empty.
    """
    # Copilot will generate the function body based on the docstring
    pass

Example: Refactoring with Prompts

I ran into this last month when I had a huge function that needed refactoring. Instead of trying to rewrite it from scratch, I used Copilot to break it down into smaller, more manageable functions. I added comments like:

// Extract the data validation logic into a separate function called validateData

Copilot then generated the new validateData function, making the original function much cleaner.

Technique 2: Leveraging Context – Feeding It Examples

Copilot learns from your existing code. If you have a consistent coding style and architecture, it will pick up on it and generate code that fits in seamlessly. The key is to provide it with enough context.

Open Relevant Files

Make sure the files that contain related code are open in your editor. This gives Copilot a broader understanding of your project's structure and dependencies.

Use Existing Patterns

If you have a specific pattern for handling errors or logging, make sure Copilot is aware of it. You can do this by showing it examples of how you've implemented these patterns in other parts of your code. For example, if you have a custom error handling function, use it in a few places, and Copilot will start suggesting it automatically.

Example: Consistent Error Handling

Let's say you have a function called handleError that logs errors and displays a user-friendly message. To make sure Copilot uses this function consistently, you can do something like this:

javascript
async function fetchData(url) {
  try {
    const response = await fetch(url);
    const data = await response.json();
    return data;
  } catch (error) {
    handleError(error, 'Failed to fetch data');
    return null;
  }
}

// Now, when you write similar functions, Copilot will suggest using handleError

Technique 3: Fine-Tuning Suggestions – The Art of Rejection

Not every suggestion is a good one. It's crucial to learn how to reject suggestions and guide Copilot towards the right solution. This is where the "X" in Copilot X really shines, with the ability to explain and refine suggestions.

Don't Be Afraid to Reject

If Copilot suggests something that doesn't quite fit, don't just accept it and try to fix it later. Reject it and try a different prompt or provide more context. You can easily reject suggestions using Ctrl+Z (or Cmd+Z on a Mac).

Edit and Refine

Sometimes, Copilot will generate code that's almost perfect but needs a little tweaking. Instead of rejecting the entire suggestion, edit it directly. This gives Copilot feedback and helps it learn your preferences.

Use Inline Explanations

Copilot X can explain its suggestions. This is incredibly useful for understanding why it generated a particular piece of code. If you're not sure about a suggestion, ask Copilot to explain it. This can help you identify potential issues and learn new coding techniques.

Example: Iterative Refinement

I was writing a complex algorithm for sorting data, and Copilot's initial suggestion was inefficient. Instead of rejecting it outright, I edited it to use a more efficient sorting algorithm. I then asked Copilot to explain the changes I made. This helped me understand the trade-offs between different sorting algorithms and improve my code.

Technique 4: Custom Snippets – Your Personal Code Library

Copilot learns from your code, but you can also explicitly teach it by creating custom snippets. Snippets are reusable blocks of code that you can insert into your code with a short keyword or abbreviation. This is incredibly useful for frequently used code patterns or boilerplate.

Define Your Snippets

Most code editors allow you to define custom snippets. The syntax for defining snippets varies depending on the editor, but the basic idea is the same: you define a keyword and a corresponding block of code. I use VS Code, so I create a snippets.json file.

Use Meaningful Keywords

Choose keywords that are easy to remember and relevant to the code you're inserting. For example, you might use the keyword log to insert a logging statement or fetchData to insert a function for fetching data.

Share Your Snippets

If you're working on a team, consider sharing your snippets with your colleagues. This can help ensure consistency across the codebase and make it easier for everyone to write code quickly.

Example: Creating a Logging Snippet

Here's an example of a snippet for inserting a logging statement in VS Code:

json
{
  "Log Statement": {
    "prefix": "log",
    "body": [
      "console.log('$1:', $2);",
      "$0"
    ],
    "description": "Inserts a console.log statement"
  }
}

Now, when you type log in your code and press Tab, it will insert the following code:

javascript
console.log('', );

You can then fill in the variable name and the message.

Technique 5: Copilot Chat – Your AI Pair Programmer

Copilot X includes a chat feature that allows you to interact with the AI in a more conversational way. This is incredibly useful for asking questions, getting explanations, and brainstorming ideas.

Ask Questions

If you're not sure how to implement a particular feature, ask Copilot. It can provide code examples, explain concepts, and suggest different approaches. Be specific and provide as much context as possible.

Get Explanations

If you're not sure why Copilot generated a particular piece of code, ask it to explain. This can help you understand the underlying logic and identify potential issues.

Brainstorm Ideas

Use Copilot Chat to brainstorm ideas and explore different solutions. It can help you think outside the box and come up with creative solutions to complex problems.

Example: Asking for Code Optimization

I had a function that was running slowly, so I asked Copilot Chat how to optimise it. I pasted the code into the chat and asked for suggestions. Copilot identified a bottleneck in the code and suggested using a more efficient data structure. I implemented the suggestion, and the function ran significantly faster.

Technique 6: Testing, Testing, 1, 2, 3

Just because Copilot generates code doesn't mean it's bug-free. It's crucial to write tests to ensure that the code works as expected. I've definitely been burnt by skipping this step.

Write Unit Tests

Write unit tests to verify that individual functions and components are working correctly. This is especially important for complex logic or algorithms.

Use Test-Driven Development (TDD)

TDD is a development approach where you write the tests before writing the code. This forces you to think about the requirements and design of your code before you start implementing it. Copilot can help with TDD by generating test cases based on your function signatures and docstrings.

Automate Your Tests

Use a continuous integration (CI) system to automatically run your tests whenever you commit code. This helps you catch bugs early and prevent them from making their way into production.

Example: Generating Tests with Copilot

I was writing a function to calculate the factorial of a number. I started by writing a docstring that described the function's behaviour.

python
def factorial(n: int) -> int:
    """Calculates the factorial of a non-negative integer.

    Args:
        n: A non-negative integer.

    Returns:
        The factorial of n. Returns 1 if n is 0.

    Raises:
        ValueError: If n is negative.
    """
    pass

I then asked Copilot to generate test cases based on the docstring. It generated the following tests:

python
import unittest

class TestFactorial(unittest.TestCase):
    def test_factorial_positive(self):
        self.assertEqual(factorial(5), 120)

    def test_factorial_zero(self):
        self.assertEqual(factorial(0), 1)

    def test_factorial_negative(self):
        with self.assertRaises(ValueError):
            factorial(-1)

I then implemented the function to pass the tests.

Technique 7: Stay Updated – Copilot is Evolving

Copilot is constantly evolving, with new features and improvements being added all the time. It's important to stay updated on the latest changes to get the most out of the tool. GitHub's blog and release notes are good starting points.

Read the Documentation

GitHub provides comprehensive documentation for Copilot. Read it to understand the tool's features and how to use them effectively.

Follow the GitHub Blog

The GitHub blog regularly publishes articles about Copilot, including tips and tricks, best practices, and announcements of new features.

Experiment with New Features

Whenever a new feature is released, take some time to experiment with it and see how it can improve your workflow. Don't be afraid to try new things and push the boundaries of what's possible.

Final Thoughts

GitHub Copilot X is a powerful tool that can significantly boost your productivity. But it's not a magic bullet. To get the most out of it, you need to understand its quirks, learn advanced techniques, and stay updated on the latest changes. Embrace AI, but don't let it replace your brain. Use it to augment your skills and become a more efficient and effective developer. Good luck, and happy coding!

And remember, these are just my experiences. Your mileage may vary. The best way to learn is to experiment and find what works best for you.

TOPICS

Tech Trends

Share This Article

Related Articles

Archives

October 202546
B

BigBerri Team

Author