code: function(compiled) {
              const tasks = compiled.tasks;
              if ( Array.isArray(tasks) === false ) {
                  return compiled.selector;
              }
              const raw = [ compiled.selector ];
              let value;
              for ( const task of tasks ) {
                  switch ( task[0] ) {
                  case ':has':
                  case ':if':
                      raw.push(':has', '(', decompile(task[1]), ')');
                      break;
                  case ':has-text':
                      if ( Array.isArray(task[1]) ) {
                          value = '/' + task[1][0] + '/' + task[1][1];
                      } else {
                          value = regexToRawValue.get(task[1]);
                          if ( value === undefined ) {
                              value = '/' + task[1] + '/';
                          }
                      }
                      raw.push(task[0], '(', value, ')');
                      break;
                  case ':matches-css':
                  case ':matches-css-after':
                  case ':matches-css-before':
                      if ( Array.isArray(task[1].value) ) {
                          value = '/' + task[1].value[0] + '/' + task[1].value[1];
                      } else {
                          value = regexToRawValue.get(task[1].value);
                          if ( value === undefined ) {
                              value = '/' + task[1].value + '/';
                          }
                      }
                      raw.push(task[0], '(', task[1].name, ': ', value, ')');
                      break;
                  case ':not':
                  case ':if-not':
                      raw.push(':not', '(', decompile(task[1]), ')');
                      break;
                  case ':spath':
                      raw.push(task[1]);
                      break;
                  case ':watch-attrs':
                  case ':xpath':
                      raw.push(task[0], '(', task[1], ')');
                      break;
                  }
              }
              return raw.join('');
          }
docs: https://github.com/gorhill/uBlock/issues/2793#issuecomment-333269387 Normalize (somewhat) the stringified version of procedural cosmetic filters -- this increase the likelihood of detecting duplicates given that uBO is able to understand syntax specific to other blockers. The normalized string version is what is reported in the logger, by design.