<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Stefan Buck</title>
    <description>The latest articles on DEV Community by Stefan Buck (@stefanbuck).</description>
    <link>https://dev.to/stefanbuck</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F91148%2F426bd0d4-fc5c-4fd8-812d-e815165703d9.jpeg</url>
      <title>DEV Community: Stefan Buck</title>
      <link>https://dev.to/stefanbuck</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stefanbuck"/>
    <language>en</language>
    <item>
      <title>Codeless Contributions with GitHub Issue Forms</title>
      <dc:creator>Stefan Buck</dc:creator>
      <pubDate>Fri, 15 Oct 2021 19:58:11 +0000</pubDate>
      <link>https://dev.to/stefanbuck/codeless-contributions-with-github-issue-forms-19gj</link>
      <guid>https://dev.to/stefanbuck/codeless-contributions-with-github-issue-forms-19gj</guid>
      <description>&lt;p&gt;Let’s talk about GitHub contributions and rethink them a bit. I want to start with questioning the foundation: what if we could contribute to a project without having to create a pull request? Imagine all we have to do is to create a GitHub issue. Yes, you can do that with GitHub Actions and the new GitHub Issue Forms. Let’s get to it!&lt;/p&gt;

&lt;h2&gt;
  
  
  What are GitHub Issue Forms?
&lt;/h2&gt;

&lt;p&gt;GitHub Issue Forms are a new feature (currently in public beta). Historically, repository maintainers used issue templates to semi-enforce a structure within a free text field, but this barely did the job. Too often people just deleted sections or didn’t fill them out.&lt;/p&gt;

&lt;p&gt;Now, with Issue Forms, gathering information is significantly more effective. A form is described in YAML.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Bug Report
description: Tell us what did not work
labels: [bug]
body:
- type: textarea
  id: description
  attributes:
    label: What happened?
  validations:
    required: true
- type: dropdown
  id: version
  attributes:
    label: Affected version
    options:
    - 1.0
    - 2.0
    - All of them
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Issue Form configuration with two input types&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The following input types are supported: &lt;code&gt;textarea&lt;/code&gt;, &lt;code&gt;input&lt;/code&gt;, &lt;code&gt;dropdown&lt;/code&gt; and &lt;code&gt;checkboxes&lt;/code&gt;. We can even mark certain inputs as required. The rendered issue template looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ny6qglfsh6mmbyp0u8e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ny6qglfsh6mmbyp0u8e.png" alt="GitHub Issue Form"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond filing bugs
&lt;/h2&gt;

&lt;p&gt;Let us take things up a notch, and see how we can use the power of Issue Forms to go beyond filing bug reports and feature requests.&lt;/p&gt;

&lt;p&gt;We learned that issues created through Issue Forms have a predictable structure. This enables all sorts of great automation. To simplify integrating with contents of Issue Forms, I wrote the &lt;a href="https://github.com/stefanbuck/github-issue-parser" rel="noopener noreferrer"&gt;GitHub Issue Parser&lt;/a&gt; Action that parses the issue body and outputs the content in a JSON format. Issues created using the Issue Form from above will create such a JSON output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Process keep running after closing it"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Issue Form Parser output&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;From here we can do whatever we want with the data. For example, we could insert this bug report in a database, or make a commit to the same or another repository. It helps to think about GitHub Actions as compute that run GitHub's infrastructure triggered by events like &lt;code&gt;issue:opened&lt;/code&gt;; only your imagination is the limit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: Codeless contribution
&lt;/h2&gt;

&lt;p&gt;I maintain a list of &lt;a href="https://github.com/stefanbuck/awesome-browser-extensions-for-github" rel="noopener noreferrer"&gt;awesome browser extensions for GitHub&lt;/a&gt;. Every now and then I get a pull request to add a new extension to the list. Dealing with the pull request is sometimes a bit of a pain for both the contributor and me. Especially when the contribution guidelines are not met. Applying what we have learned with Issue Forms, we can simplify this process to one simple step.&lt;/p&gt;

&lt;p&gt;Rather than having people to fork, pull, commit and create a pull request, they now can just create an issue using the "Submit extension" Issue Form. This form will require a bunch of information about the extension such as name, description, links, etc. As a last step the user clicks submit and the issue is created, waiting to be accepted.&lt;/p&gt;

&lt;p&gt;A "merge" can be instantiated by applying the &lt;code&gt;merge&lt;/code&gt; label. This will trigger a GitHub Workflow that will convert the issue into a code contribution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdaeajyylgyirafrh9ff8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdaeajyylgyirafrh9ff8.png" alt="Codeless contributions flow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's break down the steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A new issue has been created using the "Submit extension" Issue Form.&lt;/li&gt;
&lt;li&gt;A maintainer reviews and approves the issue by adding the &lt;code&gt;merge&lt;/code&gt; label&lt;/li&gt;
&lt;li&gt;A GitHub Workflow that listens for &lt;code&gt;labeled issue&lt;/code&gt; event runs.
3.1. To avoid conflicts with other issues, a step condition checks whether the issue is labeled with &lt;code&gt;merge&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://github.com/stefanbuck/github-issue-parser" rel="noopener noreferrer"&gt;GitHub Issue Parser&lt;/a&gt; runs and outputs the issue body in JSON format.&lt;/li&gt;
&lt;li&gt;A Node.js script reads that JSON, stores the data in a &lt;code&gt;data.json&lt;/code&gt; and generates the &lt;code&gt;readme.md&lt;/code&gt; file.
5.1 During this step, additional data like installation count, GitHub stars are fetched to enhance the readme.&lt;/li&gt;
&lt;li&gt;The changed &lt;code&gt;readme.md&lt;/code&gt; and &lt;code&gt;data.json&lt;/code&gt; files are pushed to the repository.&lt;/li&gt;
&lt;li&gt;The issue is closed with a comment.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I call this a "codeless contribution". As promised early it allows contributions to a project without having to create a pull request!&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Much faster and easier to contribute to a project.&lt;/li&gt;
&lt;li&gt;Really low barrier to entry. No understanding of the GitHub Fork &amp;amp; Pull Request Workflow is needed.&lt;/li&gt;
&lt;li&gt;The repository's contribution guidelines can be enforced.&lt;/li&gt;
&lt;li&gt;Validation and feedback on the issue contribution can be implemented&lt;/li&gt;
&lt;li&gt;No merge conflicts as issues and resulting changes are generated and committed sequentially.&lt;/li&gt;
&lt;li&gt;Fixing provided information is as simple as updating the issue.&lt;/li&gt;
&lt;li&gt;The contribution can be enhanced during the "merge" process. In the example, live data such as GitHub stars was dynamically updated on merge.&lt;/li&gt;
&lt;li&gt;Contributions can be stored within the repository to allow further processing in the future.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Issue creator does not automatically get attributed as a contributor.&lt;/li&gt;
&lt;li&gt;Does not work for more complex contribution types like code changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example: Pizza order
&lt;/h2&gt;

&lt;p&gt;If you ever wanted to order a pizza through GitHub, now's your chance. After the order has been placed, a GitHub Action picks up the issue, does the parsing using &lt;a href="https://github.com/stefanbuck/github-issue-parser" rel="noopener noreferrer"&gt;GitHub Issue Parser&lt;/a&gt;, some validation, and then creates a new commit with the order by updating the readme. &lt;a href="https://github.com/stefanbuck/ristorante/issues/new?assignees=&amp;amp;labels=order&amp;amp;template=order-pizza.yml&amp;amp;title=Order+Pizza" rel="noopener noreferrer"&gt;Give it a try&lt;/a&gt; and see how it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: Repository templates
&lt;/h2&gt;

&lt;p&gt;In the &lt;a href="https://stefanbuck.com/blog/repository-templates-meets-github-actions/" rel="noopener noreferrer"&gt;Repository Templates Meets GitHub Actions&lt;/a&gt; blog post, I talk about how GitHub Actions can be used to create a repository template with templated values. This is another great use case for codeless contributions. After creating a repository from a repository template (which is effectively just a task to copy) filling an issue within this new repository is substituting the template values with the actual values from the issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: Show preparation
&lt;/h2&gt;

&lt;p&gt;Gregor Martynus aka &lt;code&gt;gr2m&lt;/code&gt; is using &lt;a href="https://github.com/stefanbuck/github-issue-parser" rel="noopener noreferrer"&gt;GitHub Issue Parser&lt;/a&gt;, to prepare his show &lt;a href="https://github.com/gr2m/helpdesk" rel="noopener noreferrer"&gt;helpdesk&lt;/a&gt; where he is answering all your GitHub API/automation questions live on Twitch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: Advanced validation
&lt;/h2&gt;

&lt;p&gt;At the time of writing, Issue Forms do not support any custom validation. However, using &lt;a href="https://github.com/stefanbuck/github-issue-parser" rel="noopener noreferrer"&gt;GitHub Issue Parser&lt;/a&gt; enables you to add any kind of validation by processing the issue on the &lt;code&gt;issue:opened&lt;/code&gt; event.&lt;/p&gt;

&lt;p&gt;The options for codeless contribution are endless. There is no need to force contributors into pull request workflow. Let’s all make everyone’s life easier, with codeless contributions through Issue Forms!&lt;/p&gt;

&lt;p&gt;Are you interested in this concept? Want to discuss further? Let’s continue the conversation on &lt;a href="https://twitter.com/buckstefan/status/1448649345889292299" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubactions</category>
      <category>automation</category>
    </item>
    <item>
      <title>10 Tips to Get Faster Code Reviews</title>
      <dc:creator>Stefan Buck</dc:creator>
      <pubDate>Tue, 01 Jun 2021 22:01:01 +0000</pubDate>
      <link>https://dev.to/stefanbuck/10-tips-to-get-faster-code-reviews-2p05</link>
      <guid>https://dev.to/stefanbuck/10-tips-to-get-faster-code-reviews-2p05</guid>
      <description>&lt;p&gt;Code reviews can help to improve the quality of code, reduce technical debt, and they are a great way to spread knowledge about the past, present, and future of a software project. The only problem is that code reviews will become your bottleneck. Here's what you can do to help others to review your changes much easier and faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Review’ pull requests of others
&lt;/h2&gt;

&lt;p&gt;From my experience doing code reviews for over a decade, this is probably the most effective way to get your stuff reviewed quickly. It’s also a great way to level-up your understanding of the codebase and familiarize yourself with new methods from other developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Be your first reviewer
&lt;/h2&gt;

&lt;p&gt;Nothing is more annoying than spotting spelling mistakes (my specialty) and other obvious mistakes in a code review. Before requesting a code review, review your own pull request with fresh eyes. This is also a good time to apply the next tip.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Add comments on your own pull request
&lt;/h2&gt;

&lt;p&gt;Doing a proper code review takes time. Therefore we should make this a pleasant experience for everybody. Use review comments to guide the reviewer through your changes. Think about what may be unclear to them and provide additional context.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. A well-drafted description
&lt;/h2&gt;

&lt;p&gt;Do not copy the JIRA ticket description. Instead link to the ticket, (this can be automated using &lt;a href="https://pullrequestbadge.com/"&gt;Pull Request Badge&lt;/a&gt;) and write a description for your peers. For visual changes, it’s helpful to include screenshots (before, after) or record a quick video. Adding links to visuals, mockups also help reviewers to get a better understanding of your change.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Specify the area you want feedback on
&lt;/h2&gt;

&lt;p&gt;Specify the areas you want feedback on. Are you concerned about a specific line of code? Are you looking for alternatives? Adding this background helps the reviewer to provide more effective feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Credit
&lt;/h2&gt;

&lt;p&gt;Post any interesting findings which you came across while researching for a solution, such as documentation or blog posts. Also, don't forget to include a link to the Stack Overflow posts where you copied the code snippets from.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Automate nitpicking comments
&lt;/h2&gt;

&lt;p&gt;When someone asks for trivial changes, consider automating such feedback into your CI. Tools like &lt;a href="https://danger.systems/"&gt;Danger&lt;/a&gt; or ESLint can help. Btw, writing a custom ESlint plugin is not that complicated.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Split your pull request
&lt;/h2&gt;

&lt;p&gt;Don’t be afraid to put the extra time into splitting up your work, it's worth it. For example, if your change includes a refactor, create a separate pull request just for that. Not only does it make your main pull request smaller, but it also allows others to enjoy your improvements without being blocked by the other change. Also, it will go into production earlier, and therefore provide confidence in the change.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Close pull request
&lt;/h2&gt;

&lt;p&gt;If you took the wrong route, close the Pull Request and open a new one. Point to the original and explain why one approach was chosen over another. Your future self will appreciate that over a force push.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Gangsta merge
&lt;/h2&gt;

&lt;p&gt;Let’s end with a controversial one: Not every Pull Request needs code review. Sometimes it's totally legit (in my opinion) to skip the formal code review process if&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a super trivial change is being made, such as updating an image&lt;/li&gt;
&lt;li&gt;obvious spelling mistakes are being fixed&lt;/li&gt;
&lt;li&gt;a hotfix needs to be applied to a production as soon as possible to avoid further damage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do you have other tips on how to improve the code review process? Share it with me — I’m &lt;a href="https://twitter.com/buckstefan"&gt;@buckstefan&lt;/a&gt; on Twitter.&lt;/p&gt;

</description>
      <category>codereview</category>
      <category>pullrequest</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Five Essential Tools I Have Used for Years</title>
      <dc:creator>Stefan Buck</dc:creator>
      <pubDate>Mon, 17 Aug 2020 17:08:32 +0000</pubDate>
      <link>https://dev.to/stefanbuck/five-essential-tools-i-have-used-for-years-4ek</link>
      <guid>https://dev.to/stefanbuck/five-essential-tools-i-have-used-for-years-4ek</guid>
      <description>&lt;p&gt;Lots of tools come and go, but some become a crucial part of our workflow. In this post I’m going to share the five essential tools that I have used for years.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. SCM Breeze
&lt;/h2&gt;

&lt;p&gt;If I have to pick one single tool, it would be &lt;a href="https://github.com/scmbreeze/scm_breeze"&gt;SCM Breeze&lt;/a&gt;. It’s a collection of shortcuts that makes it much easier to interact with the Git command line and other system commands. With SCM Breeze I no longer have to type paths for commands such as &lt;code&gt;git add ./random.txt&lt;/code&gt;. I can simply type &lt;code&gt;gs&lt;/code&gt; to get a list of all recently modified files. In this list, each file gets a number next to it. Now I can write &lt;code&gt;ga 1&lt;/code&gt; to add the first file to my staging list. If I need to add multiple files I can pass a range like &lt;code&gt;ga 1-3&lt;/code&gt; or even use a combination like &lt;code&gt;ga 1-3 6 9&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To switch branches, I type &lt;code&gt;gb&lt;/code&gt; to get a list of all branches, followed by &lt;code&gt;gco 3&lt;/code&gt; to check out the third branch listed in the previous operation. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did you know that you can go back and forth between branches using a dash? Just type &lt;code&gt;git checkout -&lt;/code&gt; or the SCM Breeze way &lt;code&gt;gco -&lt;/code&gt;. This is not a feature of SCM Breeze and works with &lt;code&gt;cd&lt;/code&gt; too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Another super handy feature is the &lt;code&gt;ll&lt;/code&gt; shortcut. This calls &lt;code&gt;ls -al&lt;/code&gt; under the hood, but adds a number for each entry as well. This allows me to perform other commands like &lt;code&gt;rm 1-3&lt;/code&gt; on top of that, super neat!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/rsnSbNULmm0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Why I use it
&lt;/h3&gt;

&lt;p&gt;Git is the tool I use every day. SCM Breeze is an essential tool to speed up my Git workflow. It’s very easy to use, integrates smoothly into my workflow, works with other system commands, and is overall a huge time-saver. Highly recommended!&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Fasd
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/clvv/fasd"&gt;Fasd&lt;/a&gt; is a tool to access files and directories much quicker and more efficiently. Fasd records all files and directories I have accessed in the background and ranks them by “frecency” (a combination of the words “frequency” and “recency“). Then I can use Fasd to jump to directories by just a few key identifying characters. For example to access &lt;code&gt;~/user/stefan/code/octolinker&lt;/code&gt; all I have to write is &lt;code&gt;z octo&lt;/code&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Why I use it
&lt;/h3&gt;

&lt;p&gt;In the past, I set up bash aliases for every single project, so I could switch between projects very quickly. Now with Fasd it just works and I don’t have to maintain a list of aliases anymore.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Prefix commit message
&lt;/h2&gt;

&lt;p&gt;In my day job, we prefix every single commit with the related JIRA ticket number. I quickly got bored of typing the JIRA ticket number over and over again. I utilized the &lt;a href="https://git-scm.com/docs/githooks#_prepare_commit_msg"&gt;prepare-commit-msg&lt;/a&gt; git hook to check the current branch name and automatically prefix the commit message with this JIRA ticket number. The &lt;a href="https://gist.github.com/stefanbuck/17502152342770be6db5ff40bb3af17a"&gt;JIRA commit message git hook&lt;/a&gt; script is available as a gist.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why I use it
&lt;/h3&gt;

&lt;p&gt;Because I’m lazy! And I like to automate boring recurring tasks. I can’t imagine prefixing my commits by hand anymore. In addition, this pattern works well with &lt;a href="https://pullrequestbadge.com/"&gt;Pull Request Badge&lt;/a&gt;, a GitHub App I wrote primarily for myself. &lt;/p&gt;

&lt;p&gt;If you want to learn more about Pull Request Badge, you can check out my other post &lt;a href="https://stefanbuck.com/blog/automatically-add-links-to-your-pull-request-description"&gt;how to automatically add links to a pull request&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Giphy Capture
&lt;/h2&gt;

&lt;p&gt;I often add an image or a GIFs to a pull request description to help explain a visual change. I've tried many different apps, but &lt;a href="https://giphy.com/apps/giphycapture"&gt;Giphy Capture&lt;/a&gt; is the best way to create gifs! &lt;/p&gt;

&lt;h3&gt;
  
  
  Why I use it
&lt;/h3&gt;

&lt;p&gt;The ability to trim and cut the recorded GIF straight in Giphy Capture is the main reason why I used it. Apart from that, the app is simple and easy to use. &lt;/p&gt;

&lt;h2&gt;
  
  
  5. OctoLinker
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://octolinker.now.sh"&gt;OctoLinker&lt;/a&gt; is a browser extension for GitHub which turns language-specific statements like &lt;code&gt;include&lt;/code&gt;, &lt;code&gt;require&lt;/code&gt; or &lt;code&gt;import&lt;/code&gt; into links. I wrote the first version in 2013. It’s still actively maintained, supports over 20 languages / tools, and is trusted by over 25000 developers.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/IoOnBSMyRe8"&gt;
&lt;/iframe&gt;
 &lt;/p&gt;

&lt;h3&gt;
  
  
  Why I use it
&lt;/h3&gt;

&lt;p&gt;I use OctoLinker primarily for reviewing Pull Requests. OctoLinker makes it easy to discover unknown dependencies and allows me to jump to relative files with a single click. It integrates smoothly with the GitHub UI and makes reviewing pull requests faster and better. &lt;a href="https://octolinker-demo.now.sh/OctoLinker/live-demo/blob/master/index.js#LO2"&gt;Give it a try&lt;/a&gt;!&lt;/p&gt;




&lt;p&gt;I love all five tools — they save me a lot of time and I use them every day! I'd love to hear your favorite productivity tools.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tools</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
