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

Fix linting
This commit is contained in:
Brian Gough 2020-06-03 11:00:46 +01:00 committed by GitHub
commit a6e93ca401
14 changed files with 84 additions and 57 deletions

View file

@ -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

View file

@ -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_acceptance: test_clean test_acceptance_pre_run test_acceptance_run
test_clean: test_unit_clean
test_unit_clean:
ifneq (,$(wildcard test/unit))
$(DOCKER_COMPOSE_TEST_UNIT) down -v -t 0
endif
test_acceptance_debug: test_clean test_acceptance_pre_run test_acceptance_run_debug
test_acceptance: test_acceptance_clean test_acceptance_pre_run test_acceptance_run
$(MAKE) test_acceptance_clean
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) \

View file

@ -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
}

View file

@ -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.

View file

@ -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

View file

@ -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'),

View file

@ -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"

View file

@ -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",

View file

@ -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

View file

@ -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)
})

View file

@ -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)
})

View file

@ -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)
})

View file

@ -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,

View file

@ -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)
}