Просмотр исходного кода

Merge pull request #58 from overleaf/msm-fix-linting

Fix linting
Brian Gough 6 лет назад
Родитель
Сommit
a6e93ca401

+ 1 - 1
services/spelling/Dockerfile

@@ -13,7 +13,7 @@ FROM base as app
 #wildcard as some files may not be in all repos
 COPY package*.json npm-shrink*.json /app/
 
-RUN npm install --quiet
+RUN npm ci --quiet
 
 COPY . /app
 

+ 34 - 8
services/spelling/Makefile

@@ -5,6 +5,8 @@
 BUILD_NUMBER ?= local
 BRANCH_NAME ?= $(shell git rev-parse --abbrev-ref HEAD)
 PROJECT_NAME = spelling
+BUILD_DIR_NAME = $(shell pwd | xargs basename | tr -cd '[a-zA-Z0-9_.\-]')
+
 DOCKER_COMPOSE_FLAGS ?= -f docker-compose.yml
 DOCKER_COMPOSE := BUILD_NUMBER=$(BUILD_NUMBER) \
 	BRANCH_NAME=$(BRANCH_NAME) \
@@ -12,6 +14,12 @@ DOCKER_COMPOSE := BUILD_NUMBER=$(BUILD_NUMBER) \
 	MOCHA_GREP=${MOCHA_GREP} \
 	docker-compose ${DOCKER_COMPOSE_FLAGS}
 
+DOCKER_COMPOSE_TEST_ACCEPTANCE = \
+	COMPOSE_PROJECT_NAME=test_acceptance_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE)
+
+DOCKER_COMPOSE_TEST_UNIT = \
+	COMPOSE_PROJECT_NAME=test_unit_$(BUILD_DIR_NAME) $(DOCKER_COMPOSE)
+
 clean:
 	docker rmi ci/$(PROJECT_NAME):$(BRANCH_NAME)-$(BUILD_NUMBER)
 	docker rmi gcr.io/overleaf-ops/$(PROJECT_NAME):$(BRANCH_NAME)-$(BUILD_NUMBER)
@@ -28,23 +36,41 @@ lint:
 test: format lint test_unit test_acceptance
 
 test_unit:
-	@[ ! -d test/unit ] && echo "spelling has no unit tests" || $(DOCKER_COMPOSE) run --rm test_unit
+ifneq (,$(wildcard test/unit))
+	$(DOCKER_COMPOSE_TEST_UNIT) run --rm test_unit
+	$(MAKE) test_unit_clean
+endif
+
+test_clean: test_unit_clean
+test_unit_clean:
+ifneq (,$(wildcard test/unit))
+	$(DOCKER_COMPOSE_TEST_UNIT) down -v -t 0
+endif
 
-test_acceptance: test_clean test_acceptance_pre_run test_acceptance_run
+test_acceptance: test_acceptance_clean test_acceptance_pre_run test_acceptance_run
+	$(MAKE) test_acceptance_clean
 
-test_acceptance_debug: test_clean test_acceptance_pre_run test_acceptance_run_debug
+test_acceptance_debug: test_acceptance_clean test_acceptance_pre_run test_acceptance_run_debug
+	$(MAKE) test_acceptance_clean
 
 test_acceptance_run:
-	@[ ! -d test/acceptance ] && echo "spelling has no acceptance tests" || $(DOCKER_COMPOSE) run --rm test_acceptance
+ifneq (,$(wildcard test/acceptance))
+	$(DOCKER_COMPOSE_TEST_ACCEPTANCE) run --rm test_acceptance
+endif
 
 test_acceptance_run_debug:
-	@[ ! -d test/acceptance ] && echo "spelling has no acceptance tests" || $(DOCKER_COMPOSE) run -p 127.0.0.9:19999:19999 --rm test_acceptance npm run test:acceptance -- --inspect=0.0.0.0:19999 --inspect-brk
+ifneq (,$(wildcard test/acceptance))
+	$(DOCKER_COMPOSE_TEST_ACCEPTANCE) run -p 127.0.0.9:19999:19999 --rm test_acceptance npm run test:acceptance -- --inspect=0.0.0.0:19999 --inspect-brk
+endif
 
-test_clean:
-	$(DOCKER_COMPOSE) down -v -t 0
+test_clean: test_acceptance_clean
+test_acceptance_clean:
+	$(DOCKER_COMPOSE_TEST_ACCEPTANCE) down -v -t 0
 
 test_acceptance_pre_run:
-	@[ ! -f test/acceptance/js/scripts/pre-run ] && echo "spelling has no pre acceptance tests task" || $(DOCKER_COMPOSE) run --rm test_acceptance test/acceptance/js/scripts/pre-run
+ifneq (,$(wildcard test/acceptance/js/scripts/pre-run))
+	$(DOCKER_COMPOSE_TEST_ACCEPTANCE) run --rm test_acceptance test/acceptance/js/scripts/pre-run
+endif
 
 build:
 	docker build --pull --tag ci/$(PROJECT_NAME):$(BRANCH_NAME)-$(BUILD_NUMBER) \

+ 3 - 3
services/spelling/app/js/ASpell.js

@@ -89,7 +89,7 @@ class ASpellRunner {
 
       // update the cache after processing all words, to avoid cache
       // changing while we use it
-      for (let k in addToCache) {
+      for (const k in addToCache) {
         const v = addToCache[k]
         cache.set(k, v)
       }
@@ -109,7 +109,7 @@ class ASpellRunner {
   getSuggestions(language, output) {
     const lines = output.split('\n')
     const suggestions = {}
-    for (let line of Array.from(lines)) {
+    for (const line of Array.from(lines)) {
       var parts, word
       if (line[0] === '&') {
         // Suggestions found
@@ -149,7 +149,7 @@ class ASpellRunner {
       callback = () => {}
     }
     const newWord = {}
-    for (let word of Array.from(words)) {
+    for (const word of Array.from(words)) {
       if (!newWord[word] && !cache.has(language + ':' + word)) {
         newWord[word] = true
       }

+ 6 - 6
services/spelling/app/js/ASpellWorker.js

@@ -90,7 +90,10 @@ class ASpellWorker {
         )
         this.callback = null
       } else {
-        logger.warn({ error: err, ...errInfo }, 'aspell worker error')
+        logger.warn(
+          Object.assign({ error: err }, errInfo),
+          'aspell worker error'
+        )
       }
     })
     this.pipe.stdin.on('error', err => {
@@ -119,10 +122,7 @@ class ASpellWorker {
         this.callback = null
       } else {
         logger.warn(
-          {
-            error: err,
-            ...errInfo
-          },
+          Object.assign({ error: err }, errInfo),
           'aspell worker error on stdin'
         )
       }
@@ -134,7 +134,7 @@ class ASpellWorker {
     this.pipe.stdout.on('data', data => {
       // We receive the language code from Aspell as the end of data marker in
       // the data.  The input is a utf8 encoded string.
-      let oldPos = output.length
+      const oldPos = output.length
       output = output + data
       // The end marker may cross the end of a chunk, so we optimise the search
       // using the regex lastIndex property.

+ 1 - 1
services/spelling/buildscript.txt

@@ -8,4 +8,4 @@ spelling
 --language=es
 --node-version=10.19.0
 --public-repo=False
---script-version=2.0.0
+--script-version=2.2.0

+ 3 - 3
services/spelling/config/settings.defaults.js

@@ -4,14 +4,14 @@ module.exports = {
   internal: {
     spelling: {
       port: 3005,
-      host: process.env['LISTEN_ADDRESS'] || 'localhost'
+      host: process.env.LISTEN_ADDRESS || 'localhost'
     }
   },
 
   mongo: {
     url:
-      process.env['MONGO_CONNECTION_STRING'] ||
-      `mongodb://${process.env['MONGO_HOST'] || 'localhost'}/sharelatex`
+      process.env.MONGO_CONNECTION_STRING ||
+      `mongodb://${process.env.MONGO_HOST || 'localhost'}/sharelatex`
   },
 
   cacheDir: Path.resolve('cache'),

+ 3 - 3
services/spelling/package-lock.json

@@ -5827,9 +5827,9 @@
       "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
     },
     "sandboxed-module": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/sandboxed-module/-/sandboxed-module-2.0.3.tgz",
-      "integrity": "sha1-x+VFkzm7y6KMUwPusz9ug4e/upY=",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/sandboxed-module/-/sandboxed-module-2.0.4.tgz",
+      "integrity": "sha512-AwEPOdO8mg/wJjr876yCHP2DHqVN0MaggEXhp6IIf3bcI5cYoQl9QrrCHSrvToHjvdEiS5x4TVZRgjD2bEmNTA==",
       "requires": {
         "require-like": "0.1.2",
         "stack-trace": "0.0.9"

+ 4 - 4
services/spelling/package.json

@@ -42,13 +42,13 @@
     "bunyan": "^1.8.12",
     "chai": "",
     "eslint": "^6.8.0",
-    "eslint-config-prettier": "^6.10.1",
-    "eslint-config-standard": "^14.1.1",
+    "eslint-config-prettier": "^6.10.0",
+    "eslint-config-standard": "^14.1.0",
     "eslint-plugin-chai-expect": "^2.1.0",
     "eslint-plugin-chai-friendly": "^0.5.0",
-    "eslint-plugin-import": "^2.20.2",
+    "eslint-plugin-import": "^2.20.1",
     "eslint-plugin-mocha": "^6.3.0",
-    "eslint-plugin-node": "^11.1.0",
+    "eslint-plugin-node": "^11.0.0",
     "eslint-plugin-prettier": "^3.1.2",
     "eslint-plugin-promise": "^4.2.1",
     "eslint-plugin-standard": "^4.0.1",

+ 19 - 19
services/spelling/test/acceptance/js/CheckTest.js

@@ -16,15 +16,15 @@ describe('checking words', function() {
   let response
 
   describe('on successful response', function() {
-    beforeEach(async function () {
+    beforeEach(async function() {
       response = await checkWord(['anather'])
     })
 
-    it('should return status 200', async function () {
+    it('should return status 200', async function() {
       expect(response.statusCode).to.equal(200)
     })
 
-    it('should return the list of misspellings', async function () {
+    it('should return the list of misspellings', async function() {
       const body = JSON.parse(response.body)
       expect(body).to.deep.equal({
         misspellings: [{ index: 0, suggestions: ['anther', 'another'] }]
@@ -33,22 +33,22 @@ describe('checking words', function() {
   })
 
   describe('when multiple words are submitted', function() {
-    beforeEach(async function () {
+    beforeEach(async function() {
       response = await checkWord(['anather', 'anather', 'theorie'])
     })
 
-    it('should return the misspellings for all the words', async function () {
+    it('should return the misspellings for all the words', async function() {
       const body = JSON.parse(response.body)
       expect(body.misspellings.length).to.equal(3)
     })
 
-    it('should have misspelling suggestions with consecutive indexes', async function () {
+    it('should have misspelling suggestions with consecutive indexes', async function() {
       const body = JSON.parse(response.body)
       const indexes = body.misspellings.map(mspl => mspl.index)
       expect(indexes).to.deep.equal([0, 1, 2])
     })
 
-    it('should return identical suggestions for the same entry', async function () {
+    it('should return identical suggestions for the same entry', async function() {
       const body = JSON.parse(response.body)
       expect(body.misspellings[0].suggestions).to.deep.equal(
         body.misspellings[1].suggestions
@@ -57,20 +57,20 @@ describe('checking words', function() {
   })
 
   describe('when a very long list of words if submitted', function() {
-    beforeEach(async function () {
-      let words = []
+    beforeEach(async function() {
+      const words = []
       for (let i = 0; i <= 20000; i++) {
         words.push('anather')
       }
       response = await checkWord(words)
     })
 
-    it('should return misspellings for the first 10K results only', async function () {
+    it('should return misspellings for the first 10K results only', async function() {
       const body = JSON.parse(response.body)
       expect(body.misspellings.length).to.equal(10000)
     })
 
-    it('should have misspelling suggestions with consecutive indexes', async function () {
+    it('should have misspelling suggestions with consecutive indexes', async function() {
       const body = JSON.parse(response.body)
       const indexList = body.misspellings.map(mspl => mspl.index)
       expect(indexList.length).to.equal(10000) // avoid testing over an incorrect array
@@ -81,20 +81,20 @@ describe('checking words', function() {
   })
 
   describe('when a very long list of words with utf8 responses', function() {
-    beforeEach(async function () {
-      let words = []
+    beforeEach(async function() {
+      const words = []
       for (let i = 0; i <= 20000; i++) {
         words.push('anéther')
       }
       response = await checkWord(words, 'bg') // use Bulgarian to generate utf8 response
     })
 
-    it('should return misspellings for the first 10K results only', async function () {
+    it('should return misspellings for the first 10K results only', async function() {
       const body = JSON.parse(response.body)
       expect(body.misspellings.length).to.equal(10000)
     })
 
-    it('should have misspelling suggestions with consecutive indexes', async function () {
+    it('should have misspelling suggestions with consecutive indexes', async function() {
       const body = JSON.parse(response.body)
       const indexList = body.misspellings.map(mspl => mspl.index)
       expect(indexList.length).to.equal(10000) // avoid testing over an incorrect array
@@ -105,22 +105,22 @@ describe('checking words', function() {
   })
 
   describe('when multiple words with utf8 are submitted', function() {
-    beforeEach(async function () {
+    beforeEach(async function() {
       response = await checkWord(['mneá', 'meniésn', 'meônoi', 'mneá'], 'pt_BR')
     })
 
-    it('should return the misspellings for all the words', async function () {
+    it('should return the misspellings for all the words', async function() {
       const body = JSON.parse(response.body)
       expect(body.misspellings.length).to.equal(4)
     })
 
-    it('should have misspelling suggestions with consecutive indexes', async function () {
+    it('should have misspelling suggestions with consecutive indexes', async function() {
       const body = JSON.parse(response.body)
       const indexes = body.misspellings.map(mspl => mspl.index)
       expect(indexes).to.deep.equal([0, 1, 2, 3])
     })
 
-    it('should return identical suggestions for the same entry', async function () {
+    it('should return identical suggestions for the same entry', async function() {
       const body = JSON.parse(response.body)
       expect(body.misspellings[0].suggestions).to.deep.equal(
         body.misspellings[3].suggestions

+ 1 - 1
services/spelling/test/acceptance/js/HealthCheckTest.js

@@ -2,7 +2,7 @@ const { expect } = require('chai')
 const request = require('./helpers/request')
 
 describe('/health_check', function() {
-  it('should return 200', async function () {
+  it('should return 200', async function() {
     const response = await request.get('/health_check')
     expect(response.statusCode).to.equal(200)
   })

+ 3 - 1
services/spelling/test/acceptance/js/Init.js

@@ -1,4 +1,6 @@
 const App = require('../../../app.js')
 const { PORT } = require('./helpers/request')
 
-before(function(done) { return App.listen(PORT, 'localhost', done); })
+before(function(done) {
+  return App.listen(PORT, 'localhost', done)
+})

+ 1 - 1
services/spelling/test/acceptance/js/StatusTest.js

@@ -2,7 +2,7 @@ const { expect } = require('chai')
 const request = require('./helpers/request')
 
 describe('/status', function() {
-  it('should return 200', async function () {
+  it('should return 200', async function() {
     const response = await request.get('/health_check')
     expect(response.statusCode).to.equal(200)
   })

+ 1 - 2
services/spelling/test/acceptance/js/helpers/request.js

@@ -2,8 +2,7 @@ const { promisify } = require('util')
 
 const PORT = 3005
 
-const BASE_URL = `http://${process.env['HTTP_TEST_HOST'] ||
-  'localhost'}:${PORT}`
+const BASE_URL = `http://${process.env.HTTP_TEST_HOST || 'localhost'}:${PORT}`
 
 const request = require('request').defaults({
   baseUrl: BASE_URL,

+ 4 - 4
services/spelling/test/unit/js/ASpellTests.js

@@ -30,7 +30,7 @@ describe('ASpell', function() {
       }
     }))
   })
-  afterEach(function () {
+  afterEach(function() {
     clearInterval(this.ASpell.cacheDump)
   })
 
@@ -138,9 +138,9 @@ describe('ASpell', function() {
 })
 
 function __range__(left, right, inclusive) {
-  let range = []
-  let ascending = left < right
-  let end = !inclusive ? right : ascending ? right + 1 : right - 1
+  const range = []
+  const ascending = left < right
+  const end = !inclusive ? right : ascending ? right + 1 : right - 1
   for (let i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {
     range.push(i)
   }