Procházet zdrojové kódy

Merge pull request #19090 from overleaf/mj-web-metadata

[web] Ignore commented content when parsing metadata

GitOrigin-RevId: 78f9b0d6549e60fca4ba8929beb677341d885655
Mathias Jakobsen před 2 roky
rodič
revize
e48e4293a6

+ 16 - 1
services/web/app/src/Features/Metadata/MetaHandler.js

@@ -84,7 +84,8 @@ module.exports = MetaHandler = {
     const labelRe = MetaHandler.labelRegex()
     const packageRe = MetaHandler.usepackageRegex()
     const reqPackageRe = MetaHandler.ReqPackageRegex()
-    for (const line of Array.from(lines)) {
+    for (const rawLine of Array.from(lines)) {
+      const line = MetaHandler._getNonCommentedContent(rawLine)
       let labelMatch
       let clean, messy, packageMatch
       while ((labelMatch = labelRe.exec(line))) {
@@ -128,4 +129,18 @@ module.exports = MetaHandler = {
     }
     return projectMeta
   },
+
+  /**
+   * Trims comment content from line
+   * @param {string} rawLine
+   * @returns {string}
+   */
+  _getNonCommentedContent(rawLine) {
+    const commentStart = /(?:^%)|(?:[^\\]%)/
+    const match = rawLine.match(commentStart)
+    if (match) {
+      return rawLine.slice(0, match.index)
+    }
+    return rawLine
+  },
 }

+ 8 - 1
services/web/test/unit/src/Metadata/MetaHandlerTests.js

@@ -187,7 +187,14 @@ describe('MetaHandler', function () {
 
   describe('getMetaForDoc', function () {
     beforeEach(function () {
-      this.fakeLines = ['\\usepackage{abc}', 'one', '\\label{aaa}', 'two']
+      this.fakeLines = [
+        '\\usepackage{abc}',
+        'one',
+        '\\label{aaa}',
+        'two',
+        // bbb should not be in the returned labels
+        'commented label % \\label{bbb}',
+      ]
       this.fakeMeta = { labels: ['aaa'], packages: ['abc'] }
       this.DocumentUpdaterHandler.flushDocToMongo = sinon
         .stub()