]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7365 Component doesn't highlight usage when it is also a keyword
authorStas Vilchik <vilchiks@gmail.com>
Tue, 19 Apr 2016 12:27:52 +0000 (14:27 +0200)
committerStas Vilchik <vilchiks@gmail.com>
Tue, 19 Apr 2016 12:27:52 +0000 (14:27 +0200)
server/sonar-web/src/main/js/components/source-viewer/helpers/code-with-issue-locations-helper.js
server/sonar-web/tests/components/source-viewer-test.js

index a34f928b99875ee473567ee1c36972fed08f90b4..0345f56563d6333c51aa75a5ba45b79ec9c54ef1 100644 (file)
@@ -47,20 +47,23 @@ function part (str, from, to, acc) {
 /**
  * Split a code html into tokens
  * @param {string} code
+ * @param {string} rootClassName
  * @returns {Array}
  */
-function splitByTokens (code) {
+function splitByTokens (code, rootClassName = '') {
   const container = document.createElement('div');
-  const tokens = [];
+  let tokens = [];
   container.innerHTML = code;
   [].forEach.call(container.childNodes, function (node) {
     if (node.nodeType === 1) {
       // ELEMENT NODE
-      tokens.push({ className: node.className, text: node.textContent });
+      const fullClassName = rootClassName ? (rootClassName + ' ' + node.className) : node.className;
+      const innerTokens = splitByTokens(node.innerHTML, fullClassName);
+      tokens = tokens.concat(innerTokens);
     }
     if (node.nodeType === 3) {
       // TEXT NODE
-      tokens.push({ className: '', text: node.nodeValue });
+      tokens.push({ className: rootClassName, text: node.nodeValue });
     }
   });
   return tokens;
index 1a8219e6032f05c3ff965f0fd1d84f57197a0db0..1ee6fee310d110082a711adcc2dc6d0f8e62a06d 100644 (file)
@@ -72,18 +72,18 @@ describe('Source Viewer', function () {
       expect(result).to.equal('<span class="j">#include &lt;stdio.h&gt;</span>');
     });
 
-    // TODO SONAR-7365
-    it.skip('should parse syntax and usage highlighting', function () {
+    it('should parse syntax and usage highlighting', function () {
       var code = '<span class="k"><span class="sym-3 sym">this</span></span>',
+          expected = '<span class="k sym-3 sym">this</span>',
           result = helper(code, []);
-      expect(result).to.equal(code);
+      expect(result).to.equal(expected);
     });
 
-    // TODO SONAR-7365
-    it.skip('should parse nested tags', function () {
+    it('should parse nested tags', function () {
       var code = '<span class="k"><span class="sym-3 sym">this</span> is</span>',
+          expected = '<span class="k sym-3 sym">this</span><span class="k"> is</span>',
           result = helper(code, []);
-      expect(result).to.equal(code);
+      expect(result).to.equal(expected);
     });
   });
 });