<?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: Pamela Peixinho</title>
    <description>The latest articles on DEV Community by Pamela Peixinho (@pamepeixinho).</description>
    <link>https://dev.to/pamepeixinho</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%2F52291%2F7958aaa8-37e0-4082-b430-264ab906db17.jpg</url>
      <title>DEV Community: Pamela Peixinho</title>
      <link>https://dev.to/pamepeixinho</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pamepeixinho"/>
    <language>en</language>
    <item>
      <title>Progressive Lint: How to continuously improve the codebase</title>
      <dc:creator>Pamela Peixinho</dc:creator>
      <pubDate>Mon, 07 Jan 2019 15:41:00 +0000</pubDate>
      <link>https://dev.to/pamepeixinho/progressive-lint-how-to-continuously-improve-the-codebase-1nhb</link>
      <guid>https://dev.to/pamepeixinho/progressive-lint-how-to-continuously-improve-the-codebase-1nhb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;TL;DR — How I stopped &lt;strong&gt;wasting my time breaking all the apps&lt;/strong&gt; : I built a solution to improve the entire codebase during the development workflow. This post shows the &lt;strong&gt;usage&lt;/strong&gt; , &lt;strong&gt;how to setup&lt;/strong&gt; and start using &lt;strong&gt;progressive lint&lt;/strong&gt; mechanism&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--54-emQDB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Abfh_hkFxGJnZffohA5nCMQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--54-emQDB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Abfh_hkFxGJnZffohA5nCMQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Before we get started, this article is a continuation of a previous article that explains how to Build Scalable Code Style in a JavaScript Codebase. I truly recommend reading the first before continuing this one.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@pamepeixinho/how-to-build-scalable-code-style-in-a-javascript-codebase-6775f624eb61"&gt;How To Build Scalable Code Style in a JavaScript Codebase&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have you ever&lt;/em&gt; broken &lt;em&gt;any application trying to improve it? Or have you ever applied a new lint rule and spent a lot of time fixing the code?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I’ve been through both situations. Progressive Lint helped me to avoid those pitfalls moving forward.&lt;/p&gt;

&lt;p&gt;So, in this post, we’re going to see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The problems that we faced when we weren’t using a progressive approach&lt;/li&gt;
&lt;li&gt;Real world use case at QuintoAndar&lt;/li&gt;
&lt;li&gt;How to set up progressive lint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Let me tell you a story of how I broke some apps trying to make them better…&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;First of all, I’m known as “lint addicted” in my work at &lt;a href="https://www.quintoandar.com.br/"&gt;&lt;em&gt;QuintoAndar&lt;/em&gt;&lt;/a&gt;, because I always get small details in code reviews and I really really like eslint. (&lt;em&gt;As you can see, this is my second article about it _😅&lt;/em&gt;)_&lt;/p&gt;

&lt;p&gt;However, it’s impossible to predict all the rules before you start the project. This happens because some of them will be chosen later, or a new rule or pattern was decided later. There’re lots of reasons to update it later.&lt;/p&gt;

&lt;p&gt;So, it’s necessary to do improvements when the project is already live. It’s like: &lt;strong&gt;Fixing the plane while flying it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZRC8oFi0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/768/0%2As6_TBtqaD_bWLPcU.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZRC8oFi0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/768/0%2As6_TBtqaD_bWLPcU.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I wanted to fix while the project was live, but my mistake once — &lt;em&gt;by once I mean a couple of times —&lt;/em&gt; was that I was trying to do this as a &lt;strong&gt;one time job&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Sometimes, I got a project that I've never worked on and applied eslint settings, from zero or only the new rules. Of course, &lt;strong&gt;&lt;em&gt;It didn't end well.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I tried to take care. I ran the tests, ran the server locally, rendered some pages and called some endpoints. But still, &lt;strong&gt;some “planes” crashed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After I &lt;em&gt;successfully failed&lt;/em&gt; with some applications trying to make them better. I realized that it was costing more than I expected, so, it wasn’t being worth it.&lt;/p&gt;

&lt;p&gt;It costed so much of my time! But, the worst part was that most of the time I needed to redo my work. Other developers were working on the same project, and time and time again I needed to rebase and resolve conflicts 🙄.&lt;/p&gt;

&lt;p&gt;I understood that this approach wouldn’t scale. Plus, we have a Design System and specialized guild for Front-end, which means we’re usually working on new patterns and how to do things better.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;There will always be more projects and more rules to apply!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Thus, I needed to &lt;strong&gt;find a way to do it progressively&lt;/strong&gt;. That's what I did! For my surprise, it was simpler than I thought at first.&lt;/p&gt;

&lt;h4&gt;
  
  
  What’s the idea behind a progressive lint?
&lt;/h4&gt;

&lt;p&gt;We just need to &lt;strong&gt;run the new rules in the modified files&lt;/strong&gt; in the feature branch. This way, applying new lint rules is part of the workflow of each software engineer that’s working on this project.&lt;/p&gt;

&lt;p&gt;Yes, even if the developer does a minor change in the file that contains something that violates the new rule, she/he is going to be forced to fix the entire file.&lt;/p&gt;

&lt;p&gt;By the first look, it can sound bad because of the context switch or blocking the person to finish the task, but allow me to be &lt;em&gt;cliché&lt;/em&gt; right now:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uRCwY5gk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AadPqL96PupxMqOozcoYEzQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uRCwY5gk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AadPqL96PupxMqOozcoYEzQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All software engineers working together on it in the normal workflow, makes us achieve more! It’s so much more scalable.&lt;/p&gt;

&lt;h4&gt;
  
  
  Do the other Software Engineers like it?
&lt;/h4&gt;

&lt;p&gt;Now, you may say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ok, it worked, but.. does the software engineer like it?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hmm, I answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It worked, but ‘like’… that’s another thing!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;I’m kidding! 😛&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Everytime that anybody sees some error of the progressive lint, we always get bored like “&lt;em&gt;Oh, Do I really need to fix it?!&lt;/em&gt; 😒”. But the truth is most people complain and don’t like it at first, but &lt;strong&gt;none of them argue it is not worth it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We know that it’s going to arrive the day that we fixed all code is up to this rule and a new one is going to come!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The results make us excited to do it and see the code quality always improving!&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Our real current usage
&lt;/h4&gt;

&lt;p&gt;We are still working and improving it, but we already did some pilots by now. And new rules are coming in which we’ll use the same approach too.&lt;/p&gt;

&lt;p&gt;The pilot of progressive lint was to deprecate a component that we used to use. The name of it was &lt;strong&gt;Typo,&lt;/strong&gt; and we needed to stop using it and start using a new one that was better aligned with the design system.&lt;/p&gt;

&lt;p&gt;First, we tried to create a task force cross teams and treat as one time job, but as you can imagine that didn’t work. So, it was a good opportunity to create progressive lint and use it as a pilot. We created a new rule and put in the progressive mode.&lt;/p&gt;

&lt;p&gt;What happened? It worked!&lt;/p&gt;

&lt;p&gt;Every time we change a file that has an import of the deprecated component, we need to update it to use the new one! 😉&lt;/p&gt;

&lt;p&gt;And we continue… We recently added another rule for file naming that is working. And coming soon: more rules about imports, components and best practices!&lt;/p&gt;

&lt;p&gt;Therefore, my friendly advice is: &lt;strong&gt;If you’re not doing things using a progressive approach. You should start doing it and analyze the results!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So far we know the costs and benefits of the progressive approach. Let’s see now how you can do that for your project.&lt;/p&gt;

&lt;h4&gt;
  
  
  How do we do progressive lint?
&lt;/h4&gt;

&lt;p&gt;First, we need to add another script inside our package.json to run the command of progressive lint.&lt;/p&gt;

&lt;p&gt;The main difference is that we need to add the config file for the rules that are going to be applied. Like the script below.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;After that, we need to create the referenced file that specifics all the rules/settings that you want to apply in a progressive way.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Then, we need just run the command with this script in the changed files. The best way we found so far was this:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;This file should represent the CI file where we put the commands that should run. In this case, I'm putting a yml with the drone syntax, because we use drone at QuintoAndar, as you can see in &lt;a href="https://medium.com/quintoandar-tech-blog/why-we-chose-drone-to-support-our-600-deployments-to-production-each-month-ecd7f4ca785e"&gt;this article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, in the first command, we just fetch the base branch in this case (master) after we get the changed files using GIT.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git diff --name-only origin/master
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The command gets all the names of the files that were changed compared with the base branch. To specify, we just want Javascript files, so we pass the result of the command above as input of the next command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;| grep '.js\*$'
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Last, but not least, we run the command of progressive lint that we did, passing only the changed files as params to eslint.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run lint:progressive $FILES\_CHANGED
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And that’s it…&lt;/p&gt;

&lt;p&gt;With a few lines, we made progressive lint part of our workflow without pain, rework or breaking the app! And this can only be achieved with all software engineers working together ❤️&lt;/p&gt;

&lt;h3&gt;
  
  
  Join Us
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;If you like challenges and you want to work in a startup that is&lt;/em&gt; &lt;strong&gt;&lt;em&gt;redesigning&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;the&lt;/em&gt; &lt;strong&gt;&lt;em&gt;entire experience of the rental process&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;. Using&lt;/em&gt; &lt;strong&gt;&lt;em&gt;technology&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;and&lt;/em&gt; &lt;strong&gt;&lt;em&gt;design&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;as the core components. Look at our job opportunities on our&lt;/em&gt; &lt;a href="http://quin.to/career"&gt;&lt;em&gt;career page&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, we’re always looking for talented and eager to learn people.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://carreiras.quintoandar.com.br/"&gt;Work@QuintoAndar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tks for reading! I’m always open to receive feedback, recommendations or questions, feel free to contact me!!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt; : &lt;a href="https://www.linkedin.com/in/pamepeixinho"&gt;https://www.linkedin.com/in/pamepeixinho&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Twitter&lt;/strong&gt; : &lt;a href="https://twitter.com/pamepeixinho"&gt;https://twitter.com/pamepeixinho&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;GitHub&lt;/strong&gt; : &lt;a href="https://github.com/pamepeixinho"&gt;https://github.com/pamepeixinho&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Website&lt;/strong&gt; : &lt;a href="https://pamepeixinho.github.io"&gt;https://pamepeixinho.github.io&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My last name is Fishie, I swim and code sometimes. “Sea” you later! &lt;em&gt;😉&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




</description>
      <category>javascript</category>
      <category>react</category>
      <category>cleancode</category>
      <category>eslint</category>
    </item>
    <item>
      <title>How To Build Scalable Code Style in a JavaScript Codebase</title>
      <dc:creator>Pamela Peixinho</dc:creator>
      <pubDate>Mon, 07 Jan 2019 15:41:00 +0000</pubDate>
      <link>https://dev.to/pamepeixinho/how-to-build-scalable-code-style-in-a-javascript-codebase-4iml</link>
      <guid>https://dev.to/pamepeixinho/how-to-build-scalable-code-style-in-a-javascript-codebase-4iml</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;From the messy codebase to the new era of consistent quality across the company&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZSzgJ8tz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ABUfObv8SXNtYtWT-QejxMA.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZSzgJ8tz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ABUfObv8SXNtYtWT-QejxMA.gif" alt=""&gt;&lt;/a&gt;"I will not write messy code." (&lt;a href="https://www.thecuriousdev.org/code-style/"&gt;Reference&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have you ever needed to develop in a messy codebase? Have you ever switched projects and felt lost because of the different standards?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Everyone has probably been through one of those scenarios. We have been too, but we have found ways to improve code style consistency across the company.&lt;/p&gt;

&lt;p&gt;These are the main challenges that led to an inconsistent code base that we had to deal with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;many developers in a unique project&lt;/li&gt;
&lt;li&gt;many developers in many projects&lt;/li&gt;
&lt;li&gt;specifics company needs (like customized rules to be followed)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;First, let me start with a story…&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In September 2017, we released the first &lt;a href="http://www.quintoandar.com.br"&gt;QuintoAndar&lt;/a&gt; PWA (Progressive Web App). Which means that we basically rewrote the entire front-end application that existed before.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(I was part of that team, it was an amazing experience! I’ll tell it in another post someday)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;One year after the release, we now have about 10 PWAs. All of them using the same stack: React + Redux and reusing code between projects.&lt;/p&gt;

&lt;p&gt;We already had a glimpse of how bad things could get on our legacy website if things weren’t kept in check, and we definitely didn’t want our shiny new project to go the same route.&lt;/p&gt;

&lt;p&gt;As everybody knows, JavaScript is an amazing programming language with thousands of libraries and different projects around the world. However, JS world is not really perfect! But if I had to summarise the main point of contention:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The best and worst of javascript is the lack of constraints that allow us doing everything we want”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dyCWpqXt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/494/0%2A8OCHayyeziDTsZ7A" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dyCWpqXt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/494/0%2A8OCHayyeziDTsZ7A" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have so much “freedom” with JS, which is amazing because we can create a lot of things. However, it’s dangerous too! Just imagine many developers being able to do whatever they want in a single project without any kind of standard /consistency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It can turn into a mess as it was our old project.&lt;/strong&gt; Messy code is difficult to read, test and maintain. This makes the project more “buggy” and harder for the new developers to onboard.&lt;/p&gt;

&lt;p&gt;As a developer, &lt;strong&gt;I would prefer not to give that kind of “freedom”&lt;/strong&gt; as we can get a bit &lt;strong&gt;too much creative&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qL9L4UAk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ABdFgPbF4luZ0QIVIzPUqRQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qL9L4UAk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ABdFgPbF4luZ0QIVIzPUqRQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BIDagRCu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/740/1%2AIzLUWyl8SU30hLNwQ41z7w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BIDagRCu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/740/1%2AIzLUWyl8SU30hLNwQ41z7w.png" alt=""&gt;&lt;/a&gt;For illustrative purposes only&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So... How did we avoid making the same mistakes of the old project in the new ones? How did we prevent messy code?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We set boundaries to our own “freedom”! We put constraints on the project in order to make the code clean and consistent. It helps developers to be &lt;strong&gt;creative&lt;/strong&gt; in &lt;strong&gt;solutions&lt;/strong&gt; for the problems &lt;strong&gt;not&lt;/strong&gt; for &lt;strong&gt;code style&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How did we set boundaries?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First of all, we enforced at least one code-reviewer in each pull-request! Unfortunately, this is not automated because it depends on humans, so it can’t scale as well and some errors and inconsistencies will pass!&lt;/p&gt;

&lt;p&gt;For the task of automating we used &lt;strong&gt;code linters&lt;/strong&gt; to check the code style and best practices. Thus, we can ensure that &lt;strong&gt;all JS files&lt;/strong&gt; in a project will be &lt;strong&gt;consistent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This leads to improved readability and maintainability of the code. It also helps to find syntax errors and have fewer bugs. Making this process part of CI is key to ensure that standards are kept during the entire development cycle.&lt;/p&gt;

&lt;p&gt;There are code linters for almost any programming language, in JS, the most popular is &lt;a href="https://eslint.org/"&gt;Eslint&lt;/a&gt;*.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;*If you want to know how it works internally you can see&lt;/em&gt; &lt;a href="https://hackernoon.com/how-linting-and-eslint-improve-code-quality-fa83d2469efe"&gt;&lt;em&gt;here&lt;/em&gt;&lt;/a&gt; &lt;em&gt;and there are lots of articles about eslint as you can see &lt;em&gt;[_here&lt;/em&gt;](&lt;a href="https://github.com/dustinspecker/awesome-eslint"&gt;https://github.com/dustinspecker/awesome-eslint&lt;/a&gt;)&lt;/em&gt;._&lt;/p&gt;

&lt;p&gt;Now you may think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ok, lint.. Everybody knows.. Why am I reading this article?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We had to scale this solution to several projects and repositories and this can become a growing pain. As companies grow, so does the number of projects in JS, including back-end in NodeJS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, how to maintain the same code style and code quality for the entire codebase?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As I told before, we have &lt;strong&gt;10 PWAs&lt;/strong&gt; and an &lt;strong&gt;internal components' library&lt;/strong&gt; too. On top of that, we have several micro-services in NodeJS. As we can see in the image below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RvzV9yT4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Asfr15bsvI4BRE1RLSAf8Uw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RvzV9yT4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Asfr15bsvI4BRE1RLSAf8Uw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thus, we truly understand the pain to try to maintain the same code style and code quality in the entire codebase.&lt;/p&gt;

&lt;p&gt;Still, you might think that is not a huge pain because we can just &lt;strong&gt;copy and paste&lt;/strong&gt; the eslint config and rules in ALL our projects &lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s a solution, but obviously, &lt;strong&gt;it’s not the best one!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every new config or new rule you want to put, you should go through all the projects replicating the same thing.&lt;/p&gt;

&lt;p&gt;The real danger here is that you may forget to apply some change in one and when you see it, we’re not following the same code style again =&amp;gt; inconsistent codebase 😑&lt;/p&gt;

&lt;p&gt;For that, the best way to fix it is using a cool feature of Eslint called &lt;strong&gt;Shareable Configs&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Shareable Configs
&lt;/h3&gt;

&lt;p&gt;All the eslint configurations of a project are in a file named .eslintrc.This file is an important part of your project and sometimes you may want to share it with other projects or people.&lt;/p&gt;

&lt;h4&gt;
  
  
  How can we share it?
&lt;/h4&gt;

&lt;p&gt;Shareable config allows you to publish your configuration settings on &lt;a href="https://www.npmjs.com/"&gt;npm.&lt;/a&gt; Allowing others to download and use it in their ESLint projects.&lt;/p&gt;

&lt;p&gt;All you need to do is add it as a dev-dependency in your project and extend it in the eslint resource file.&lt;/p&gt;

&lt;p&gt;There are lots of shareable configs in npm right now as we can see &lt;a href="https://github.com/dustinspecker/awesome-eslint#configs"&gt;here&lt;/a&gt;. One of the most used is Airbnb’s. This is one that we use at QuintoAndar too, but we felt the need to add our own settings too.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SkqHm9DM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/601/0%2AHhqq5UTOTiBDaTUx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SkqHm9DM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/601/0%2AHhqq5UTOTiBDaTUx.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thus, we created our shareable config packages &lt;a href="https://github.com/quintoandar/eslint-config-quintoandar"&gt;&lt;em&gt;eslint-config-quintoandar&lt;/em&gt;&lt;/a&gt;. But as you know we have specific stuff to PWA (front) and some to our micro-services (back-end). That’s why we created:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/eslint-config-quintoandar-base"&gt;&lt;strong&gt;eslint-config-quintoandar-base&lt;/strong&gt;&lt;/a&gt; is the npm package that it’s common for everything in JS and uses NodeJS (&lt;a href="https://github.com/quintoandar/eslint-config-quintoandar/tree/master/eslint-config-quintoandar-base"&gt;see at GitHub&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/eslint-config-quintoandar-pwa"&gt;&lt;strong&gt;eslint-config-quintoandar-pwa&lt;/strong&gt;&lt;/a&gt; is another npm package that has the specific configurations to react applications. It &lt;strong&gt;extends&lt;/strong&gt; the QuintoAndar base package (&lt;em&gt;eslint-config-quintoandar-base)&lt;/em&gt; and adds the specific stuff (&lt;a href="https://github.com/quintoandar/eslint-config-quintoandar/tree/master/eslint-config-quintoandar-pwa"&gt;see at GitHub&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Feel free to use our packages, and we’re also open to contributions&lt;/em&gt;. Everything is documented. If you want to create your own, you may also use as a reference.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G0Agmco_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AxTDPQR_YAT7GNOR8tI23cA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G0Agmco_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AxTDPQR_YAT7GNOR8tI23cA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At QuintoAndar, we’re still working on those packages and the usage of them. But the &lt;strong&gt;results are visible&lt;/strong&gt; , with this tool you can maintain the same code quality and application quality because we could use rules that help to find bugs and improve performance.&lt;/p&gt;

&lt;p&gt;For example, one simple rule that helps us to avoid unnecessary loss of performance, forcing not to use arrow functions or bind inside the render of React components, like this (line 8):&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;The code above would not pass in our eslint and, consequently, break the build (CI) forcing the developer to fix it.&lt;/p&gt;

&lt;p&gt;The example above is a rule that already exists on the package provided by Airbnb. In case you feel the need, like we did, to create rules for your specific scenarios you can &lt;strong&gt;create custom rules&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom rules
&lt;/h3&gt;

&lt;p&gt;Sometimes you need to &lt;strong&gt;enforce a specific rule&lt;/strong&gt; in your codebase that is not going to be relevant outside of your company or you need to create one that doesn’t exist yet in the many existing &lt;a href="https://www.npmjs.com/search?q=keywords%3Aeslintplugin"&gt;open-source plugins&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It’s really easy and simple to create a new rule.&lt;/p&gt;

&lt;p&gt;You just need to use the AST (Abstract syntax tree) to find what you want to report and set the description of how to fix it. If you need a more detailed description you can find it at&lt;a href="https://flexport.engineering/writing-custom-lint-rules-for-your-picky-developers-67732afa1803"&gt;this article&lt;/a&gt; or in &lt;a href="https://eslint.org/docs/developer-guide/working-with-rules"&gt;eslint docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At QuintoAndar, a npm package with our custom rules:&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/eslint-plugin-quintoandar"&gt;&lt;strong&gt;eslint-plugin-quintoandar&lt;/strong&gt;&lt;/a&gt; (&lt;a href="https://github.com/quintoandar/eslint-config-quintoandar/tree/master/eslint-plugin-quintoandar"&gt;GitHub&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;In this plugin, we have different kinds of &lt;a href="https://github.com/quintoandar/eslint-config-quintoandar/tree/master/eslint-plugin-quintoandar#rules"&gt;custom rules&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Rules that are applicable to every project of every company, for example&lt;/em&gt;:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A rule does not allow the use of target="_blank" without using rel="noopener noreferrer"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Rules that are applicable only for QuintoAndar, for example&lt;/em&gt;:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A rule created to deprecate an internal component that should not be used anymore, or it can be applied to functions or files too.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A rule to deprecate a file in your project is the simplest rule that you could make. You just need to assert the import like this:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;As you can see, it's really easy to customize lint rules to comply with new necessities of your team or company maintaining consistency and code quality across the codebase.&lt;/p&gt;

&lt;p&gt;So, the final solution for consistent code quality across the company was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add eslint in all projects&lt;/li&gt;
&lt;li&gt;Create and use npm packages of shareable config for the company&lt;/li&gt;
&lt;li&gt;Create new customized rules to comply with new requirements&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Still, these steps won't solve the whole problem, because it now means that every new rule needs to be applied to all files in all repositories at the same time.&lt;/p&gt;

&lt;p&gt;It doesn't scale and it's dangerous because we can break the apps. So, we need to figure how to apply the rule &lt;strong&gt;continually&lt;/strong&gt; using a &lt;strong&gt;progressive way to apply them&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I've already broken some apps trying to enforce a new rule everywhere in one shot.&lt;/strong&gt; However, I found a better approach. Do you want to learn about that?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;See the next article that explains what and how we to use Progressive Lint and why you must start doing in this way.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@pamepeixinho/progressive-lint-how-to-continuously-improve-the-codebase-507f823b1d38"&gt;Progressive Lint: How to continuously improve the codebase&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--59klEPKY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/500/0%2AbMppZ7CcKs55pOEY.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--59klEPKY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/500/0%2AbMppZ7CcKs55pOEY.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Join Us
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;If you like challenges and you want to work in a startup that is redesigning the&lt;/em&gt; &lt;strong&gt;&lt;em&gt;entire experience of the rental process&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;using&lt;/em&gt; &lt;strong&gt;&lt;em&gt;technology&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;and&lt;/em&gt; &lt;strong&gt;&lt;em&gt;design&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;as the core components. Look at our job opportunities on our&lt;/em&gt; &lt;a href="http://quin.to/career"&gt;&lt;em&gt;career page&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. We’re always looking for talented and eager to learn people.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://carreiras.quintoandar.com.br"&gt;Work@QuintoAndar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tks for reading! I’m always open to receive feedback, recommendations or questions, feel free to contact me!!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt; : &lt;a href="https://www.linkedin.com/in/pamepeixinho"&gt;https://www.linkedin.com/in/pamepeixinho&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Twitter&lt;/strong&gt; : &lt;a href="https://twitter.com/pamepeixinho"&gt;https://twitter.com/pamepeixinho&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;GitHub&lt;/strong&gt; : &lt;a href="https://github.com/pamepeixinho"&gt;https://github.com/pamepeixinho&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Website&lt;/strong&gt; : &lt;a href="https://pamepeixinho.github.io"&gt;https://pamepeixinho.github.io&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My last name is LittleFish, I swim and code sometimes. “Sea” you later! &lt;em&gt;😉&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




</description>
      <category>react</category>
      <category>javascript</category>
      <category>scalability</category>
      <category>eslint</category>
    </item>
    <item>
      <title>My VSCode World</title>
      <dc:creator>Pamela Peixinho</dc:creator>
      <pubDate>Tue, 19 Jun 2018 03:13:01 +0000</pubDate>
      <link>https://dev.to/pamepeixinho/my-vscode-world-1g63</link>
      <guid>https://dev.to/pamepeixinho/my-vscode-world-1g63</guid>
      <description>

&lt;p&gt;Hi everyone,&lt;/p&gt;

&lt;p&gt;I'm gonna talk about one thing that I’m usually asked at my work or events:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Your VSCode looks different, what is this extension? Can you pass me these extensions?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m still a &lt;em&gt;beginner&lt;/em&gt; but I really like to customize and improve my code environment. So, I decided to write this explaining all the extensions, tricks, settings, and helpers that I use, instead of an article with "Top 10 extensions".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dmHSZRU1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AehYGNxDnE21_kUpEITZsVQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dmHSZRU1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AehYGNxDnE21_kUpEITZsVQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First of all, why VSCode ??&lt;/p&gt;

&lt;p&gt;VSCode is an IDE from Microsoft. It’s &lt;strong&gt;free&lt;/strong&gt; , &lt;strong&gt;open source&lt;/strong&gt; and &lt;strong&gt;built with JS + electron&lt;/strong&gt;. It’s good for all languages, but mainly for &lt;em&gt;Javascript&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It's &lt;a href="https://code.visualstudio.com/docs/getstarted/settings"&gt;simple and easy to customize everything in VSCode&lt;/a&gt; as good as the autocomplete and debug.&lt;/p&gt;

&lt;p&gt;Plus: IMO, VSCode is good for both, "&lt;em&gt;frontenders&lt;/em&gt;" and "&lt;em&gt;backenders&lt;/em&gt;" !!&lt;/p&gt;

&lt;h4&gt;
  
  
  Table of Contents
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://medium.com/p/2c7b7506e32c#ec19"&gt;Interesting Settings&lt;/a&gt;
1.1 &lt;a href="https://medium.com/p/2c7b7506e32c#5bf8"&gt;Font&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/@pamepeixinho/my-vscode-world-2c7b7506e32c#1f57"&gt;Useful for Everyone (Backenders and Frontenders)&lt;/a&gt;
2.1 &lt;a href="https://medium.com/@pamepeixinho/my-vscode-world-2c7b7506e32c#9b4a"&gt;IDE Settings and extensions&lt;/a&gt;
2.2 &lt;a href="https://medium.com/@pamepeixinho/my-vscode-world-2c7b7506e32c#f488"&gt;Version Control&lt;/a&gt;
2.3 &lt;a href="https://medium.com/@pamepeixinho/my-vscode-world-2c7b7506e32c#ad4d"&gt;Node/NPM&lt;/a&gt;
2.4 &lt;a href="https://medium.com/@pamepeixinho/my-vscode-world-2c7b7506e32c#648f"&gt;Lint&lt;/a&gt;
2.5 &lt;a href="https://medium.com/@pamepeixinho/my-vscode-world-2c7b7506e32c#d0f5"&gt;Test&lt;/a&gt;
2.6 &lt;a href="https://medium.com/@pamepeixinho/my-vscode-world-2c7b7506e32c#e3c7"&gt;Markdown&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@pamepeixinho/my-vscode-world-2c7b7506e32c#cdbf"&gt;Useful for Frontenders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@pamepeixinho/my-vscode-world-2c7b7506e32c#ee6f"&gt;Other cool extensions&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Interesting Settings
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Font
&lt;/h4&gt;

&lt;p&gt;The main font that I use is &lt;a href="https://github.com/tonsky/FiraCode"&gt;Fira Code&lt;/a&gt; (&lt;em&gt;Monospaced font with programming ligatures&lt;/em&gt;). You need to install this font at your font system and enable it just adding to your settings:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Set the font family
“editor.fontFamily”: “‘Fira Code’, Menlo, Monaco, ‘Courier New’, monospace”,

// Enable the font ligature
“editor.fontLigatures”: true,
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Then, you have a font like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CB389SCt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/812/1%2AQ1y6nDxs3U_P3GhusQwLpg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CB389SCt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/812/1%2AQ1y6nDxs3U_P3GhusQwLpg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Useful for Everyone (&lt;em&gt;Backenders and Frontenders&lt;/em&gt;)
&lt;/h3&gt;

&lt;p&gt;Here's the extensions list of my VSCode world:&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;IDE Settings and extensions&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync"&gt;&lt;strong&gt;Settings Sync&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sync all your VSCode settings across multiple machines. I always have this problem because I have work and personal notebook.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Synchronize Settings, Snippets, Themes, File Icons, Launch, Keybindings, Workspaces and Extensions Across Multiple Machines Using GitHub Gist&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Os81ZO92--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Anl3OlJfHCdwP-QobiXyaTw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Os81ZO92--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Anl3OlJfHCdwP-QobiXyaTw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync"&gt;Settings Sync - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=RoscoP.ActiveFileInStatusBar"&gt;&lt;strong&gt;Active file at status bar&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It shows the full path of the currently active file in the status bar&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8_bCihHR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/734/1%2AxxtyK7R9wbRZHa3I7xcF2A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8_bCihHR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/734/1%2AxxtyK7R9wbRZHa3I7xcF2A.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=RoscoP.ActiveFileInStatusBar"&gt;Active File In StatusBar - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=k--kato.intellij-idea-keybindings"&gt;&lt;strong&gt;Intellij Keybindings&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the people addicted for JetBrains Products too:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Port of IntelliJ IDEA Keybindings&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=k--kato.intellij-idea-keybindings"&gt;IntelliJ IDEA Keybindings - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight"&gt;&lt;strong&gt;TODO highlight&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;“It’s just highlight, why do you like it?”. &lt;em&gt;Answer&lt;/em&gt;: It’s easy to find your TODOs with this highlight.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H_M8MGHS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/748/1%2A-mTbiwgjrCpEiqoA-yZWig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H_M8MGHS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/748/1%2A-mTbiwgjrCpEiqoA-yZWig.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight"&gt;TODO Highlight - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=shyykoserhiy.vscode-spotify"&gt;&lt;strong&gt;Spotify&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=shyykoserhiy.vscode-spotify"&gt;vscode-spotify - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=cssho.vscode-svgviewer"&gt;&lt;strong&gt;SVG Viewer&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;“svgviewer.enableautopreview”: true,
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=cssho.vscode-svgviewer"&gt;SVG Viewer - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=wmaurer.change-case"&gt;&lt;strong&gt;Change Case&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ri_sMf26--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/656/1%2A6-t5Jm7sLT5WVtKl94GwEw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ri_sMf26--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/656/1%2A6-t5Jm7sLT5WVtKl94GwEw.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=wmaurer.change-case"&gt;change-case - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost"&gt;&lt;strong&gt;Import cost&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xeSTqbbK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1000/1%2AQ8Gxqo7Ybt3WpQt6hhK6nA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xeSTqbbK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1000/1%2AQ8Gxqo7Ybt3WpQt6hhK6nA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost"&gt;Import Cost - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Version Control
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens"&gt;&lt;strong&gt;Gitlens&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the name says: it’s an extensions like “lens” for git.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Supercharge the Git capabilities built into Visual Studio Code&lt;/strong&gt;  — Visualize code authorship at a glance via Git blame annotations and code lens...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There’re a lot of settings to improve the git lens for your taste, for example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zygkNSPQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Aytg19RTSlnHQf9wxvkPkoA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zygkNSPQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Aytg19RTSlnHQf9wxvkPkoA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d2BJ37BN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ay-c7jiNkjqGr-xDm5Ttmjw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d2BJ37BN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ay-c7jiNkjqGr-xDm5Ttmjw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens"&gt;GitLens - Git supercharged - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Node/NPM
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.npm-intellisense"&gt;&lt;strong&gt;NPM Intellisense&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Autocompletes NPM modules in import statements&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.npm-intellisense"&gt;npm Intellisense - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=pflannery.vscode-versionlens"&gt;&lt;strong&gt;Version lens&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It shows package version information for NPM. It’s very good to see versions available and the package status.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ycJMt4kz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/480/1%2ATR9CWrd833Hl2upOknT2Gg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ycJMt4kz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/480/1%2ATR9CWrd833Hl2upOknT2Gg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=pflannery.vscode-versionlens"&gt;Version Lens - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Lint
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint"&gt;&lt;strong&gt;ESLint&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Integrates ESLint into VS Code. That’s extremely necessary for projects that use eslint (It should be all, if you want a clean code 😆). When you have this extension enabled and some eslint violation, your IDE looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z0UOkDct--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/544/1%2Al0OX1iZ0AEc4bzs8mQWOVA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z0UOkDct--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/544/1%2Al0OX1iZ0AEc4bzs8mQWOVA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every line highlighted shows error Lint errors it’s.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plus:&lt;/strong&gt; It’s easy to fix it using “Fix all auto-fixable problems” or enable to auto-fix when saving in the settings&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mlNAQ7GT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A1Q8SWN914R1wPs9Yqpgdhg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mlNAQ7GT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A1Q8SWN914R1wPs9Yqpgdhg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;“eslint.autoFixOnSave”: true,
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint"&gt;ESLint - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Test
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=andys8.jest-snippets"&gt;&lt;strong&gt;Jest Snippets&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you use Jest as test framework, you should have this amazing plugin to help write tests faster.&lt;/p&gt;

&lt;p&gt;The main snippets that I use is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;desc+[tab]&lt;/strong&gt;: &lt;em&gt;describe(() =&amp;gt; {}&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;it+[tab]&lt;/strong&gt;: &lt;em&gt;it(‘’, () =&amp;gt; {});&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=andys8.jest-snippets"&gt;Jest Snippets - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=Orta.vscode-jest"&gt;&lt;strong&gt;Jest&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a nice plugin for jest users, it shows at the start of each &lt;strong&gt;it&lt;/strong&gt; if it’s passing. However, I put a warning here, this plugin &lt;em&gt;can slow down your IDE&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=Orta.vscode-jest"&gt;Jest - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Markdown
&lt;/h4&gt;

&lt;p&gt;For all the &lt;strong&gt;markdown lovers,&lt;/strong&gt; like me:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint"&gt;&lt;strong&gt;Markdown lint&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This extension shows a highlight to improve your markdown file to follow good practices.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint"&gt;markdownlint - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=hnw.vscode-auto-open-markdown-preview"&gt;&lt;strong&gt;Auto open markdown preview&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=hnw.vscode-auto-open-markdown-preview"&gt;Auto-Open Markdown Preview - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one"&gt;&lt;strong&gt;Markdown all in one&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one"&gt;Markdown All in One - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=bierner.markdown-emoji"&gt;&lt;strong&gt;Markdown emoji&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=bierner.markdown-emoji"&gt;Markdown Emoji - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Useful for Frontenders
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag"&gt;Auto close tag&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag"&gt;Auto Close Tag - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag"&gt;Auto rename tag&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag"&gt;Auto Rename Tag - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=naumovs.color-highlight"&gt;Color highlight&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=naumovs.color-highlight"&gt;Color Highlight - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=jpoissonnier.vscode-styled-components"&gt;Styled Components&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=jpoissonnier.vscode-styled-components"&gt;vscode-styled-components - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Other cool extensions
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=alefragnani.Bookmarks"&gt;Bookmarks&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=alefragnani.Bookmarks"&gt;Bookmarks - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense"&gt;Path intellisense&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense"&gt;Path Intellisense - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://marketplace.visualstudio.com/items?itemName=WallabyJs.quokka-vscode"&gt;Quokka&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mGBP6QTA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/644/0%2AlntqtztHoSbduALQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mGBP6QTA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/644/0%2AlntqtztHoSbduALQ" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=WallabyJs.quokka-vscode"&gt;Quokka.js - Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article will be updated when I found new cool extensions! If you know about some nice extension or setting that It's not here, please contact me 😃&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt; : &lt;a href="https://www.linkedin.com/in/pamepeixinho"&gt;https://www.linkedin.com/in/pamepeixinho&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Twitter&lt;/strong&gt; : &lt;a href="https://twitter.com/pamepeixinho"&gt;https://twitter.com/pamepeixinho&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Github&lt;/strong&gt; : &lt;a href="https://github.com/pamepeixinho"&gt;https://github.com/pamepeixinho&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Website&lt;/strong&gt; : &lt;a href="https://pamepeixinho.github.io"&gt;https://pamepeixinho.github.io&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My name is LittleFish, I swim and code sometimes. "Sea" you later! 😉&lt;/p&gt;
&lt;/blockquote&gt;


</description>
      <category>developertools</category>
      <category>extension</category>
      <category>ide</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
