[cm6] Move cursor over existing closing brace when inserting a required parameter (#13494)

* Move cursor over existing closing brace

* Update package-lock.json

* Update tests

GitOrigin-RevId: dd729e41c2174d9f4563f2f47efcc075c7453ced
This commit is contained in:
Alf Eaton 2023-06-29 09:51:35 +01:00 committed by Copybot
parent 789253e41d
commit adbccde085
4 changed files with 22 additions and 20 deletions

14
package-lock.json generated
View file

@ -3280,9 +3280,8 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="
},
"node_modules/@codemirror/autocomplete": {
"version": "6.6.1",
"resolved": "git+ssh://git@github.com/overleaf/codemirror-autocomplete.git#4514fd21c6c9219f5c23a6a675ad843bb7a5b2bd",
"integrity": "sha512-3xD9M0e5cw0XsC7mMfRy+vKcOup7Nno4J3r0aTvwWqsUlQYBzT0R3sBEn6y+gHdpIpuSEx+jKIGKiqBsWI8czg==",
"version": "6.8.0",
"resolved": "git+ssh://git@github.com/overleaf/codemirror-autocomplete.git#03ea9e4565635c9bc005c9b809713d1897aabc59",
"license": "MIT",
"dependencies": {
"@codemirror/language": "^6.0.0",
@ -41256,7 +41255,7 @@
"@babel/preset-env": "^7.21.5",
"@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.21.5",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#4514fd21c6c9219f5c23a6a675ad843bb7a5b2bd",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#v6.8.0-overleaf-1",
"@codemirror/commands": "^6.2.3",
"@codemirror/lang-markdown": "^6.1.1",
"@codemirror/language": "^6.6.0",
@ -44935,9 +44934,8 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="
},
"@codemirror/autocomplete": {
"version": "git+ssh://git@github.com/overleaf/codemirror-autocomplete.git#4514fd21c6c9219f5c23a6a675ad843bb7a5b2bd",
"integrity": "sha512-3xD9M0e5cw0XsC7mMfRy+vKcOup7Nno4J3r0aTvwWqsUlQYBzT0R3sBEn6y+gHdpIpuSEx+jKIGKiqBsWI8czg==",
"from": "@codemirror/autocomplete@github:overleaf/codemirror-autocomplete#4514fd21c6c9219f5c23a6a675ad843bb7a5b2bd",
"version": "git+ssh://git@github.com/overleaf/codemirror-autocomplete.git#03ea9e4565635c9bc005c9b809713d1897aabc59",
"from": "@codemirror/autocomplete@github:overleaf/codemirror-autocomplete#v6.8.0-overleaf-1",
"requires": {
"@codemirror/language": "^6.0.0",
"@codemirror/state": "^6.0.0",
@ -50239,7 +50237,7 @@
"@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.21.5",
"@babel/register": "^7.21.0",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#4514fd21c6c9219f5c23a6a675ad843bb7a5b2bd",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#v6.8.0-overleaf-1",
"@codemirror/commands": "^6.2.3",
"@codemirror/lang-markdown": "^6.1.1",
"@codemirror/language": "^6.6.0",

View file

@ -57,8 +57,12 @@ export const extendRequiredParameter = (
argumentNode.getChild('OpenBrace') &&
argumentNode.getChild('CloseBrace')
// add a closing brace if needed
if (nextChar(state.doc, change.to) !== '}') {
if (nextChar(state.doc, change.to) === '}') {
// include an existing closing brace, so the cursor moves after it
change.insert += '}'
change.to++
} else {
// add a closing brace if needed
if (countUnclosedBraces(state.doc, change.from, change.to) > 0) {
change.insert += '}'
}

View file

@ -71,7 +71,7 @@
"@babel/preset-env": "^7.21.5",
"@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.21.5",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#4514fd21c6c9219f5c23a6a675ad843bb7a5b2bd",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#v6.8.0-overleaf-1",
"@codemirror/commands": "^6.2.3",
"@codemirror/lang-markdown": "^6.1.1",
"@codemirror/language": "^6.6.0",

View file

@ -177,7 +177,7 @@ describe('autocomplete', { scrollBehavior: false }, function () {
cy.contains('\\includegraphics[width=0.3\\textwidth]{frog.jpg}')
// start a new line and select an "includegraphics" command completion
cy.get('@line').type('{rightArrow}{Enter}')
cy.get('@line').type('{Enter}')
activeEditorLine().type('\\includegr')
cy.contains('\\includegraphics[]{}').click()
@ -191,7 +191,7 @@ describe('autocomplete', { scrollBehavior: false }, function () {
cy.contains('\\includegraphics[]{test-folder/example.png}')
activeEditorLine()
.type(`${'{leftArrow}'.repeat('test-folder/example.png'.length)}fr`)
.type(`${'{leftArrow}'.repeat('test-folder/example.png}'.length)}fr`)
.type('{ctrl+ }')
cy.findAllByRole('listbox').should('have.length', 1)
@ -492,7 +492,7 @@ describe('autocomplete', { scrollBehavior: false }, function () {
cy.get('@line').contains('\\cite{ref-2}')
// start typing another reference
cy.get('@line').type(', re')
cy.get('@line').type('{leftArrow}, re')
// autocomplete open again
cy.findAllByRole('listbox').contains('ref-3').click()
@ -1031,37 +1031,37 @@ describe('autocomplete', { scrollBehavior: false }, function () {
activeEditorLine().type('\\include{s', { delay: 100 })
cy.findAllByRole('option').contains('sometext.txt').click()
activeEditorLine().should('have.text', '\\include{sometext.txt}')
activeEditorLine().type('{rightArrow}{Enter}')
activeEditorLine().type('{Enter}')
activeEditorLine().type('\\inclu', { delay: 100 })
cy.contains('\\include{}').click()
cy.contains('example.tex').click()
activeEditorLine().should('have.text', '\\include{example}')
activeEditorLine().type('{rightArrow}{Enter}')
activeEditorLine().type('{Enter}')
activeEditorLine().type('\\inclu', { delay: 100 })
cy.findAllByRole('option').contains('\\include{}').click()
cy.findAllByRole('option').contains('sometext.txt').click()
activeEditorLine().should('have.text', '\\include{sometext.txt}')
activeEditorLine().type('{rightArrow}{Enter}')
activeEditorLine().type('{Enter}')
activeEditorLine().click().as('line')
activeEditorLine().type('\\input{e', { delay: 100 })
cy.findAllByRole('option').contains('example.tex').click()
activeEditorLine().should('have.text', '\\input{example}')
activeEditorLine().type('{rightArrow}{Enter}')
activeEditorLine().type('{Enter}')
activeEditorLine().click().as('line')
activeEditorLine().type('\\input{s', { delay: 100 })
cy.findAllByRole('option').contains('sometext.txt').click()
activeEditorLine().should('have.text', '\\input{sometext.txt}')
activeEditorLine().type('{rightArrow}{Enter}')
activeEditorLine().type('{Enter}')
activeEditorLine().type('\\inpu', { delay: 100 })
cy.findAllByRole('option').contains('\\input{}').click()
cy.findAllByRole('option').contains('example.tex').click()
activeEditorLine().should('have.text', '\\input{example}')
activeEditorLine().type('{rightArrow}{Enter}')
activeEditorLine().type('{Enter}')
activeEditorLine().type('\\inpu', { delay: 100 })
cy.findAllByRole('option').contains('\\input{}').click()