Uploaded image for project: 'SonarQube'
  1. SonarQube
  2. SONAR-3927

Detect copy-paste duplications changing variable names

    XMLWordPrintable

    Details

    • Type: New Feature
    • Status: Closed
    • Priority: Major
    • Resolution: Duplicate
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: Duplications
    • Labels:
      None

      Description

      AFAIK, Sonar (java or javascript) doesn't detect duplications when someone copy-paste code and just changes the variable names.

      if(i > 0) {
      a.call()
      }

      -----------

      if(j > 0) {
      b.call()
      }

      I put here a real case in javascript :

      File 1:

      this.finaliza = function(){
      nombre_llistat = 0;

      codi_llistat = "<ul>";

      fets_llistat_elm.find("li").each(function {

      li_elm = $(this);
      input_elm = li_elm.find("input");

      if (input_elm.is(":checked"))

      { codi_llistat += "<li><input type=\"hidden\" value=\"" + input_elm.val() + "\" />" + li_elm.find("span").text() + "</li>"; nombre_llistat++; input_elm.addClass(fetVitalDefaultClass); }

      else

      { input_elm.removeClass(fetVitalDefaultClass); }

      });

      codi_llistat += "</ul>";

      codi_fet_txt = (nombre_llistat == 1) ? txtFet : txtFets;
      codi_info = (nombre_llistat == 0) ? txtNoHiHaFets + "." : "Hi ha <strong>" + nombre_llistat + " " + codi_fet_txt + "</strong>.";

      fets_seleccionats_elm.find("p.info").html(codi_info);
      fets_seleccionats_elm.find(".listaOrdenable").html(codi_llistat);

      fets_seleccionats_elm.slideDown(300);
      fets_llistat_elm.slideUp(300);

      // Marcamos el módulo como modificado.
      this.modificado();
      }

      File 2:

      this.finaliza = function(){
      nombre_llistat = 0;

      codi_llistat = "<ul>";

      materies_llistat_elm.find("li").each(function {

      li_elm = $(this);
      input_elm = li_elm.find("input");

      if (input_elm.attr("checked") == "checked")

      { codi_llistat += "<li><input type=\"hidden\" value=\"" + input_elm.val() + "\" />" + li_elm.find("span").text() + "</li>"; nombre_llistat++; input_elm.addClass(materiaDefaultClass); }

      else

      { input_elm.removeClass(materiaDefaultClass); }

      });

      codi_llistat += "</ul>";

      codi_materia_txt = (nombre_llistat == 1) ? txtMateria : txtMateries;
      codi_info = (nombre_llistat == 0) ? txtNoHiHaMateries + "." : "Hi ha <strong>" + nombre_llistat + " " + codi_materia_txt + "</strong>.";

      materies_seleccionats_elm.find("p.info").html(codi_info);
      materies_seleccionats_elm.find(".listaOrdenable").html(codi_llistat);

      materies_seleccionats_elm.slideDown(300);
      materies_llistat_elm.slideUp(300);

      }

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              Unassigned Unassigned
              Reporter:
              ejaenv enric jaen
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: