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

Fixed issues reported by ESLint in "src/" directory.

Kamil Piechaczek 8 лет назад
Родитель
Сommit
e0212e36d5
50 измененных файлов с 254 добавлено и 165 удалено
  1. 1 3
      packages/ckeditor5-engine/src/controller/insertcontent.js
  2. 11 8
      packages/ckeditor5-engine/src/conversion/mapper.js
  3. 1 1
      packages/ckeditor5-engine/src/conversion/modelconsumable.js
  4. 2 2
      packages/ckeditor5-engine/src/conversion/viewconsumable.js
  5. 1 1
      packages/ckeditor5-engine/src/dev-utils/deltareplayer.js
  6. 3 4
      packages/ckeditor5-engine/src/dev-utils/enableenginedebug.js
  7. 1 1
      packages/ckeditor5-engine/src/dev-utils/model.js
  8. 8 2
      packages/ckeditor5-engine/src/dev-utils/view.js
  9. 6 6
      packages/ckeditor5-engine/src/model/delta/attributedelta.js
  10. 2 1
      packages/ckeditor5-engine/src/model/delta/basic-deltas.js
  11. 6 6
      packages/ckeditor5-engine/src/model/delta/insertdelta.js
  12. 8 8
      packages/ckeditor5-engine/src/model/delta/markerdelta.js
  13. 12 6
      packages/ckeditor5-engine/src/model/delta/mergedelta.js
  14. 4 3
      packages/ckeditor5-engine/src/model/delta/movedelta.js
  15. 4 4
      packages/ckeditor5-engine/src/model/delta/removedelta.js
  16. 5 6
      packages/ckeditor5-engine/src/model/delta/renamedelta.js
  17. 10 6
      packages/ckeditor5-engine/src/model/delta/splitdelta.js
  18. 8 6
      packages/ckeditor5-engine/src/model/delta/transform.js
  19. 12 6
      packages/ckeditor5-engine/src/model/delta/unwrapdelta.js
  20. 5 5
      packages/ckeditor5-engine/src/model/delta/weakinsertdelta.js
  21. 13 6
      packages/ckeditor5-engine/src/model/delta/wrapdelta.js
  22. 5 3
      packages/ckeditor5-engine/src/model/document.js
  23. 1 1
      packages/ckeditor5-engine/src/model/documentfragment.js
  24. 2 2
      packages/ckeditor5-engine/src/model/element.js
  25. 5 5
      packages/ckeditor5-engine/src/model/liveposition.js
  26. 6 3
      packages/ckeditor5-engine/src/model/liverange.js
  27. 2 2
      packages/ckeditor5-engine/src/model/node.js
  28. 2 1
      packages/ckeditor5-engine/src/model/operation/attributeoperation.js
  29. 1 2
      packages/ckeditor5-engine/src/model/operation/insertoperation.js
  30. 2 1
      packages/ckeditor5-engine/src/model/operation/rootattributeoperation.js
  31. 20 4
      packages/ckeditor5-engine/src/model/operation/transform.js
  32. 33 8
      packages/ckeditor5-engine/src/model/range.js
  33. 2 1
      packages/ckeditor5-engine/src/model/rootelement.js
  34. 3 1
      packages/ckeditor5-engine/src/model/selection.js
  35. 4 6
      packages/ckeditor5-engine/src/model/treewalker.js
  36. 3 4
      packages/ckeditor5-engine/src/model/writer.js
  37. 2 4
      packages/ckeditor5-engine/src/view/attributeelement.js
  38. 1 2
      packages/ckeditor5-engine/src/view/containerelement.js
  39. 4 2
      packages/ckeditor5-engine/src/view/document.js
  40. 1 1
      packages/ckeditor5-engine/src/view/documentfragment.js
  41. 13 8
      packages/ckeditor5-engine/src/view/domconverter.js
  42. 4 4
      packages/ckeditor5-engine/src/view/element.js
  43. 2 2
      packages/ckeditor5-engine/src/view/emptyelement.js
  44. 1 1
      packages/ckeditor5-engine/src/view/node.js
  45. 1 1
      packages/ckeditor5-engine/src/view/observer/mutationobserver.js
  46. 4 2
      packages/ckeditor5-engine/src/view/observer/selectionobserver.js
  47. 2 1
      packages/ckeditor5-engine/src/view/range.js
  48. 4 1
      packages/ckeditor5-engine/src/view/renderer.js
  49. 1 1
      packages/ckeditor5-engine/src/view/writer.js
  50. 0 0
      packages/ckeditor5-engine/test.js

+ 1 - 3
packages/ckeditor5-engine/src/controller/insertcontent.js

@@ -289,8 +289,6 @@ class Insertion {
 		}
 
 		if ( mergeRight ) {
-			let position;
-
 			/* istanbul ignore if */
 			if ( !this.position.isEqual( mergePosRight ) ) {
 				// Algorithm's correctness check. We should never end up here but it's good to know that we did.
@@ -305,7 +303,7 @@ class Insertion {
 
 			// OK:  <p>xx[]</p> + <p>yy</p> => <p>xx[]yy</p> (when sticks to previous)
 			// NOK: <p>xx[]</p> + <p>yy</p> => <p>xxyy[]</p> (when sticks to next)
-			position = new LivePosition( this.position.root, this.position.path, 'sticksToPrevious' );
+			const position = new LivePosition( this.position.root, this.position.path, 'sticksToPrevious' );
 
 			this.batch.merge( mergePosRight );
 

+ 11 - 8
packages/ckeditor5-engine/src/conversion/mapper.js

@@ -439,12 +439,13 @@ export default class Mapper {
 
 	/**
 	 * Fired for each model-to-view position mapping request. The purpose of this event is to enable custom model-to-view position
-	 * mapping. Callbacks added to this event take {@link module:engine/model/position~Position model position} and are expected to calculate
-	 * {@link module:engine/view/position~Position view position}. Calculated view position should be added as `viewPosition` value in
-	 * `data` object that is passed as one of parameters to the event callback.
+	 * mapping. Callbacks added to this event take {@link module:engine/model/position~Position model position} and are expected to
+	 * calculate {@link module:engine/view/position~Position view position}. Calculated view position should be added as `viewPosition`
+	 * value in `data` object that is passed as one of parameters to the event callback.
 	 *
 	 * 		// Assume that "captionedImage" model element is converted to <img> and following <span> elements in view,
-	 * 		// and the model element is bound to <img> element. Force mapping model positions inside "captionedImage" to that <span> element.
+	 * 		// and the model element is bound to <img> element. Force mapping model positions inside "captionedImage" to that
+	 * 		// <span> element.
 	 *		mapper.on( 'modelToViewPosition', ( evt, data ) => {
 	 *			const positionParent = modelPosition.parent;
 	 *
@@ -473,8 +474,9 @@ export default class Mapper {
 	 *		const prevViewElement = data.mapper.toViewElement( prevModelElement );
 	 *		// ... Use `prevViewElement` to find correct `data.viewPosition`.
 	 *
-	 * **Note:** default mapping callback is provided with `low` priority setting and does not cancel the event, so it is possible to attach
-	 * a custom callback after default callback and also use `data.viewPosition` calculated by default callback (for example to fix it).
+	 * **Note:** default mapping callback is provided with `low` priority setting and does not cancel the event, so it is possible to
+	 * attach a custom callback after default callback and also use `data.viewPosition` calculated by default callback
+	 * (for example to fix it).
 	 *
 	 * **Note:** default mapping callback will not fire if `data.viewPosition` is already set.
 	 *
@@ -505,8 +507,9 @@ export default class Mapper {
 	 *			}
 	 *		} );
 	 *
-	 * **Note:** default mapping callback is provided with `low` priority setting and does not cancel the event, so it is possible to attach
-	 * a custom callback after default callback and also use `data.modelPosition` calculated by default callback (for example to fix it).
+	 * **Note:** default mapping callback is provided with `low` priority setting and does not cancel the event, so it is possible to
+	 * attach a custom callback after default callback and also use `data.modelPosition` calculated by default callback
+	 * (for example to fix it).
 	 *
 	 * **Note:** default mapping callback will not fire if `data.modelPosition` is already set.
 	 *

+ 1 - 1
packages/ckeditor5-engine/src/conversion/modelconsumable.js

@@ -280,7 +280,7 @@ export default class ModelConsumable {
 	 * @returns {Symbol} Symbol generated for given properties.
 	 */
 	_addSymbolForTextProxy( start, end, parent ) {
-		const symbol = Symbol();
+		const symbol = Symbol( 'textProxySymbol' );
 		let startMap, endMap;
 
 		startMap = this._textProxyRegistry.get( start );

+ 2 - 2
packages/ckeditor5-engine/src/conversion/viewconsumable.js

@@ -41,8 +41,8 @@ export default class ViewConsumable {
 		/**
 		 * Map of consumable elements. If {@link module:engine/view/element~Element element} is used as a key,
 		 * {@link module:engine/conversion/viewconsumable~ViewElementConsumables ViewElementConsumables} instance is stored as value.
-		 * For {@link module:engine/view/text~Text text nodes} and {@link module:engine/view/documentfragment~DocumentFragment document fragments}
-		 * boolean value is stored as value.
+		 * For {@link module:engine/view/text~Text text nodes} and
+		 * {@link module:engine/view/documentfragment~DocumentFragment document fragments} boolean value is stored as value.
 		 *
 		 * @protected
 		 * @member {Map.<module:engine/conversion/viewconsumable~ViewElementConsumables|Boolean>}

+ 1 - 1
packages/ckeditor5-engine/src/dev-utils/deltareplayer.js

@@ -59,7 +59,7 @@ export default class DeltaReplayer {
 	 * @returns {Promise}
 	 */
 	play( timeInterval = 1000 ) {
-		const deltaReplayer = this;
+		const deltaReplayer = this; // eslint-disable-line consistent-this
 
 		return new Promise( ( res, rej ) => {
 			play();

+ 3 - 4
packages/ckeditor5-engine/src/dev-utils/enableenginedebug.js

@@ -25,8 +25,7 @@ import NoOperation from '../model/operation/nooperation';
 import RenameOperation from '../model/operation/renameoperation';
 import RootAttributeOperation from '../model/operation/rootattributeoperation';
 import Delta from '../model/delta/delta';
-import AttributeDelta from '../model/delta/attributedelta';
-import { RootAttributeDelta } from '../model/delta/attributedelta';
+import { AttributeDelta, RootAttributeDelta } from '../model/delta/attributedelta';
 import InsertDelta from '../model/delta/insertdelta';
 import MarkerDelta from '../model/delta/markerdelta';
 import MergeDelta from '../model/delta/mergedelta';
@@ -63,7 +62,7 @@ const LOG_SEPARATOR = '-------';
 let enabled = false;
 
 // Logging function used to log debug messages.
-let log = console.log;
+let log = console.log; // eslint-disable-line no-console
 
 /**
  * Enhances model classes with logging methods. Returns a plugin that should be loaded in the editor to
@@ -229,7 +228,7 @@ function enableLoggingTools() {
 	};
 
 	ModelDocumentFragment.prototype.toString = function() {
-		return `documentFragment`;
+		return 'documentFragment';
 	};
 
 	ModelDocumentFragment.prototype.log = function() {

+ 1 - 1
packages/ckeditor5-engine/src/dev-utils/model.js

@@ -304,7 +304,7 @@ export function parse( data, schema, options = {} ) {
 	}
 
 	// Convert view selection to model selection.
-	let selection;
+	let selection; // eslint-disable-line one-var
 
 	if ( viewSelection ) {
 		const ranges = [];

+ 8 - 2
packages/ckeditor5-engine/src/dev-utils/view.js

@@ -457,7 +457,10 @@ class RangeParser {
 				if ( text ) {
 					if (
 						this.sameSelectionCharacters ||
-						( !this.sameSelectionCharacters && ( item.bracket == TEXT_RANGE_START_TOKEN || item.bracket == TEXT_RANGE_END_TOKEN ) )
+						(
+							!this.sameSelectionCharacters &&
+							( item.bracket == TEXT_RANGE_START_TOKEN || item.bracket == TEXT_RANGE_END_TOKEN )
+						)
 					) {
 						// Store information about text range delimiter.
 						this._positions.push( {
@@ -480,7 +483,10 @@ class RangeParser {
 						} );
 					}
 				} else {
-					if ( !this.sameSelectionCharacters && item.bracket == TEXT_RANGE_START_TOKEN || item.bracket == TEXT_RANGE_END_TOKEN ) {
+					if ( !this.sameSelectionCharacters &&
+						item.bracket == TEXT_RANGE_START_TOKEN ||
+						item.bracket == TEXT_RANGE_END_TOKEN
+					) {
 						throw new Error( `Parse error - text range delimiter '${ item.bracket }' is placed inside empty text node. ` );
 					}
 

+ 6 - 6
packages/ckeditor5-engine/src/model/delta/attributedelta.js

@@ -131,9 +131,9 @@ export class RootAttributeDelta extends Delta {
  * @param {*} value Attribute new value.
  */
 register( 'setAttribute', function( itemOrRange, key, value ) {
-	attribute( this, key, value, itemOrRange );
+	attribute( this, key, value, itemOrRange ); // eslint-disable-line no-invalid-this
 
-	return this;
+	return this; // eslint-disable-line no-invalid-this
 } );
 
 /**
@@ -147,9 +147,9 @@ register( 'setAttribute', function( itemOrRange, key, value ) {
  * @param {String} key Attribute key.
  */
 register( 'removeAttribute', function( itemOrRange, key ) {
-	attribute( this, key, null, itemOrRange );
+	attribute( this, key, null, itemOrRange ); // eslint-disable-line no-invalid-this
 
-	return this;
+	return this; // eslint-disable-line no-invalid-this
 } );
 
 function attribute( batch, key, value, itemOrRange ) {
@@ -204,9 +204,9 @@ function changeRange( batch, doc, attributeKey, attributeValue, range ) {
 	// position of the iterator but the previous one (we need to iterate one more time to get the value after).
 	let position;
 	// Value before the currently position.
-	let attributeValueBefore;
+	let attributeValueBefore; // eslint-disable-line one-var
 	// Value after the currently position.
-	let attributeValueAfter;
+	let attributeValueAfter; // eslint-disable-line one-var
 
 	for ( const value of range ) {
 		attributeValueAfter = value.item.getAttribute( attributeKey );

+ 2 - 1
packages/ckeditor5-engine/src/model/delta/basic-deltas.js

@@ -12,6 +12,7 @@
 // which would already have all default deltas registered.
 
 // Import default suite of deltas so a feature have to include only Batch class file.
+/* eslint-disable no-unused-vars */
 import d01 from './attributedelta';
 import d02 from './insertdelta';
 import d03 from './mergedelta';
@@ -22,4 +23,4 @@ import d07 from './splitdelta';
 import d08 from './unwrapdelta';
 import d09 from './weakinsertdelta';
 import d10 from './wrapdelta';
-/* jshint unused: false*/
+/* eslint-enable no-unused-vars */

+ 6 - 6
packages/ckeditor5-engine/src/model/delta/insertdelta.js

@@ -100,15 +100,15 @@ register( 'insert', function( position, nodes ) {
 
 	// If nothing is inserted do not create delta and operation.
 	if ( normalizedNodes.length === 0 ) {
-		return this;
+		return this; // eslint-disable-line no-invalid-this
 	}
 
 	const delta = new InsertDelta();
-	const insert = new InsertOperation( position, normalizedNodes, this.document.version );
+	const insert = new InsertOperation( position, normalizedNodes, this.document.version ); // eslint-disable-line no-invalid-this
 
-	this.addDelta( delta );
+	this.addDelta( delta ); // eslint-disable-line no-invalid-this
 	delta.addOperation( insert );
-	this.document.applyOperation( insert );
+	this.document.applyOperation( insert ); // eslint-disable-line no-invalid-this
 
 	// When element is a DocumentFragment we need to move its markers to Document#markers.
 	if ( nodes instanceof DocumentFragment ) {
@@ -120,11 +120,11 @@ register( 'insert', function( position, nodes ) {
 				markerRange.end._getCombined( rangeRootPosition, position )
 			);
 
-			this.setMarker( markerName, range );
+			this.setMarker( markerName, range ); // eslint-disable-line no-invalid-this
 		}
 	}
 
-	return this;
+	return this; // eslint-disable-line no-invalid-this
 } );
 
 DeltaFactory.register( InsertDelta );

+ 8 - 8
packages/ckeditor5-engine/src/model/delta/markerdelta.js

@@ -65,7 +65,7 @@ export default class MarkerDelta extends Delta {
  */
 register( 'setMarker', function( markerOrName, newRange ) {
 	const name = typeof markerOrName == 'string' ? markerOrName : markerOrName.name;
-	const currentMarker = this.document.markers.get( name );
+	const currentMarker = this.document.markers.get( name ); // eslint-disable-line no-invalid-this
 
 	if ( !newRange && !currentMarker ) {
 		/**
@@ -81,13 +81,13 @@ register( 'setMarker', function( markerOrName, newRange ) {
 	if ( !newRange ) {
 		// If `newRange` is not given, treat this as synchronizing existing marker.
 		// Create `MarkerOperation` with `oldRange` set to `null`, so reverse operation will remove the marker.
-		addOperation( this, name, null, currentRange );
+		addOperation( this, name, null, currentRange ); // eslint-disable-line no-invalid-this
 	} else {
 		// Just change marker range.
-		addOperation( this, name, currentRange, newRange );
+		addOperation( this, name, currentRange, newRange ); // eslint-disable-line no-invalid-this
 	}
 
-	return this;
+	return this; // eslint-disable-line no-invalid-this
 } );
 
 /**
@@ -100,7 +100,7 @@ register( 'setMarker', function( markerOrName, newRange ) {
 register( 'removeMarker', function( markerOrName ) {
 	const name = typeof markerOrName == 'string' ? markerOrName : markerOrName.name;
 
-	if ( !this.document.markers.has( name ) ) {
+	if ( !this.document.markers.has( name ) ) { // eslint-disable-line no-invalid-this
 		/**
 		 * Trying to remove marker that does not exist.
 		 *
@@ -109,11 +109,11 @@ register( 'removeMarker', function( markerOrName ) {
 		throw new CKEditorError( 'batch-removeMarker-no-marker: Trying to remove marker that does not exist.' );
 	}
 
-	const oldRange = this.document.markers.get( name ).getRange();
+	const oldRange = this.document.markers.get( name ).getRange(); // eslint-disable-line no-invalid-this
 
-	addOperation( this, name, oldRange, null );
+	addOperation( this, name, oldRange, null ); // eslint-disable-line no-invalid-this
 
-	return this;
+	return this; // eslint-disable-line no-invalid-this
 } );
 
 function addOperation( batch, name, oldRange, newRange ) {

+ 12 - 6
packages/ckeditor5-engine/src/model/delta/mergedelta.js

@@ -94,7 +94,7 @@ export default class MergeDelta extends Delta {
  */
 register( 'merge', function( position ) {
 	const delta = new MergeDelta();
-	this.addDelta( delta );
+	this.addDelta( delta ); // eslint-disable-line no-invalid-this
 
 	const nodeBefore = position.nodeBefore;
 	const nodeAfter = position.nodeAfter;
@@ -120,16 +120,22 @@ register( 'merge', function( position ) {
 	const positionAfter = Position.createFromParentAndOffset( nodeAfter, 0 );
 	const positionBefore = Position.createFromParentAndOffset( nodeBefore, nodeBefore.maxOffset );
 
-	const move = new MoveOperation( positionAfter, nodeAfter.maxOffset, positionBefore, this.document.version );
+	const move = new MoveOperation(
+		positionAfter,
+		nodeAfter.maxOffset,
+		positionBefore,
+		this.document.version // eslint-disable-line no-invalid-this
+	);
+
 	move.isSticky = true;
 	delta.addOperation( move );
-	this.document.applyOperation( move );
+	this.document.applyOperation( move ); // eslint-disable-line no-invalid-this
 
-	const remove = new RemoveOperation( position, 1, this.document.version );
+	const remove = new RemoveOperation( position, 1, this.document.version ); // eslint-disable-line no-invalid-this
 	delta.addOperation( remove );
-	this.document.applyOperation( remove );
+	this.document.applyOperation( remove ); // eslint-disable-line no-invalid-this
 
-	return this;
+	return this; // eslint-disable-line no-invalid-this
 } );
 
 DeltaFactory.register( MergeDelta );

+ 4 - 3
packages/ckeditor5-engine/src/model/delta/movedelta.js

@@ -108,7 +108,7 @@ function addMoveOperation( batch, delta, sourcePosition, howMany, targetPosition
  */
 register( 'move', function( itemOrRange, targetPosition ) {
 	const delta = new MoveDelta();
-	this.addDelta( delta );
+	this.addDelta( delta ); // eslint-disable-line no-invalid-this
 
 	if ( itemOrRange instanceof Range ) {
 		if ( !itemOrRange.isFlat ) {
@@ -120,12 +120,13 @@ register( 'move', function( itemOrRange, targetPosition ) {
 			throw new CKEditorError( 'batch-move-range-not-flat: Range to move is not flat.' );
 		}
 
+		// eslint-disable-next-line no-invalid-this
 		addMoveOperation( this, delta, itemOrRange.start, itemOrRange.end.offset - itemOrRange.start.offset, targetPosition );
 	} else {
-		addMoveOperation( this, delta, Position.createBefore( itemOrRange ), 1, targetPosition );
+		addMoveOperation( this, delta, Position.createBefore( itemOrRange ), 1, targetPosition ); // eslint-disable-line no-invalid-this
 	}
 
-	return this;
+	return this; // eslint-disable-line no-invalid-this
 } );
 
 DeltaFactory.register( MoveDelta );

+ 4 - 4
packages/ckeditor5-engine/src/model/delta/removedelta.js

@@ -43,20 +43,20 @@ function addRemoveOperation( batch, delta, position, howMany ) {
  */
 register( 'remove', function( itemOrRange ) {
 	const delta = new RemoveDelta();
-	this.addDelta( delta );
+	this.addDelta( delta ); // eslint-disable-line no-invalid-this
 
 	if ( itemOrRange instanceof Range ) {
 		// The array is reversed, so the ranges are correct and do not have to be updated.
 		const ranges = itemOrRange.getMinimalFlatRanges().reverse();
 
 		for ( const flat of ranges ) {
-			addRemoveOperation( this, delta, flat.start, flat.end.offset - flat.start.offset );
+			addRemoveOperation( this, delta, flat.start, flat.end.offset - flat.start.offset ); // eslint-disable-line no-invalid-this
 		}
 	} else {
-		addRemoveOperation( this, delta, Position.createBefore( itemOrRange ), 1 );
+		addRemoveOperation( this, delta, Position.createBefore( itemOrRange ), 1 ); // eslint-disable-line no-invalid-this
 	}
 
-	return this;
+	return this; // eslint-disable-line no-invalid-this
 } );
 
 DeltaFactory.register( RemoveDelta );

+ 5 - 6
packages/ckeditor5-engine/src/model/delta/renamedelta.js

@@ -66,14 +66,13 @@ register( 'rename', function( element, newName ) {
 	}
 
 	const delta = new RenameDelta();
-	this.addDelta( delta );
+	this.addDelta( delta ); // eslint-disable-line no-invalid-this
 
-	apply(
-		this, delta,
-		new RenameOperation( Position.createBefore( element ), element.name, newName, this.document.version )
-	);
+	// eslint-disable-next-line no-invalid-this
+	const renameOperation = new RenameOperation( Position.createBefore( element ), element.name, newName, this.document.version );
+	apply( this, delta, renameOperation ); // eslint-disable-line no-invalid-this
 
-	return this;
+	return this; // eslint-disable-line no-invalid-this
 } );
 
 DeltaFactory.register( RenameDelta );

+ 10 - 6
packages/ckeditor5-engine/src/model/delta/splitdelta.js

@@ -116,7 +116,7 @@ export default class SplitDelta extends Delta {
  */
 register( 'split', function( position ) {
 	const delta = new SplitDelta();
-	this.addDelta( delta );
+	this.addDelta( delta ); // eslint-disable-line no-invalid-this
 
 	const splitElement = position.parent;
 
@@ -131,23 +131,27 @@ register( 'split', function( position ) {
 
 	const copy = new Element( splitElement.name, splitElement.getAttributes() );
 
-	const insert = new InsertOperation( Position.createAfter( splitElement ), copy, this.document.version );
+	const insert = new InsertOperation(
+		Position.createAfter( splitElement ),
+		copy,
+		this.document.version // eslint-disable-line no-invalid-this
+	);
 
 	delta.addOperation( insert );
-	this.document.applyOperation( insert );
+	this.document.applyOperation( insert ); // eslint-disable-line no-invalid-this
 
 	const move = new MoveOperation(
 		position,
 		splitElement.maxOffset - position.offset,
 		Position.createFromParentAndOffset( copy, 0 ),
-		this.document.version
+		this.document.version // eslint-disable-line no-invalid-this
 	);
 	move.isSticky = true;
 
 	delta.addOperation( move );
-	this.document.applyOperation( move );
+	this.document.applyOperation( move ); // eslint-disable-line no-invalid-this
 
-	return this;
+	return this; // eslint-disable-line no-invalid-this
 } );
 
 DeltaFactory.register( SplitDelta );

+ 8 - 6
packages/ckeditor5-engine/src/model/delta/transform.js

@@ -16,8 +16,8 @@ const specialCases = new Map();
 
 const deltaTransform = {
 	/**
-	 * Transforms given {@link module:engine/model/delta/delta~Delta delta} by another {@link module:engine/model/delta/delta~Delta delta} and
-	 * returns the result of that transformation as an array containing one or more {@link module:engine/model/delta/delta~Delta delta}
+	 * Transforms given {@link module:engine/model/delta/delta~Delta delta} by another {@link module:engine/model/delta/delta~Delta delta}
+	 * and returns the result of that transformation as an array containing one or more {@link module:engine/model/delta/delta~Delta delta}
 	 * instances.
 	 *
 	 * Delta transformations heavily base on {@link module:engine/model/operation/transform~transform operational transformations}. Since
@@ -29,8 +29,8 @@ const deltaTransform = {
 	 * we need to handle transformations in special cases in a custom way.
 	 *
 	 * The function itself looks whether two given delta types have a special case function registered. If so, the deltas are
-	 * transformed using that function. If not, {@link module:engine/model/delta/transform~defaultTransform default transformation algorithm}
-	 * is used.
+	 * transformed using that function. If not,
+	 * {@link module:engine/model/delta/transform~defaultTransform default transformation algorithm} is used.
 	 *
 	 * @param {module:engine/model/delta/delta~Delta} a Delta that will be transformed.
 	 * @param {module:engine/model/delta/delta~Delta} b Delta to transform by.
@@ -206,8 +206,10 @@ const deltaTransform = {
 	 * @param {Boolean} isAMoreImportantThanB Flag indicating whether the deltas from `deltasA` set should be treated as more
 	 * important when resolving conflicts.
 	 * @returns {Object}
-	 * @returns {Array.<module:engine/model/delta/delta~Delta>} return.deltasA The first set of deltas transformed by the second set of deltas.
-	 * @returns {Array.<module:engine/model/delta/delta~Delta>} return.deltasB The second set of deltas transformed by the first set of deltas.
+	 * @returns {Array.<module:engine/model/delta/delta~Delta>} return.deltasA The first set of deltas transformed by the second
+	 * set of deltas.
+	 * @returns {Array.<module:engine/model/delta/delta~Delta>} return.deltasB The second set of deltas transformed by the first
+	 * set of deltas.
 	 */
 	transformDeltaSets( deltasA, deltasB, isAMoreImportantThanB ) {
 		const transformedDeltasA = Array.from( deltasA );

+ 12 - 6
packages/ckeditor5-engine/src/model/delta/unwrapdelta.js

@@ -89,22 +89,28 @@ register( 'unwrap', function( element ) {
 	}
 
 	const delta = new UnwrapDelta();
-	this.addDelta( delta );
+	this.addDelta( delta ); // eslint-disable-line no-invalid-this
 
 	const sourcePosition = Position.createFromParentAndOffset( element, 0 );
 
-	const move = new MoveOperation( sourcePosition, element.maxOffset, Position.createBefore( element ), this.document.version );
+	const move = new MoveOperation(
+		sourcePosition,
+		element.maxOffset,
+		Position.createBefore( element ),
+		this.document.version // eslint-disable-line no-invalid-this
+	);
+
 	move.isSticky = true;
 	delta.addOperation( move );
-	this.document.applyOperation( move );
+	this.document.applyOperation( move ); // eslint-disable-line no-invalid-this
 
 	// Computing new position because we moved some nodes before `element`.
 	// If we would cache `Position.createBefore( element )` we remove wrong node.
-	const remove = new RemoveOperation( Position.createBefore( element ), 1, this.document.version );
+	const remove = new RemoveOperation( Position.createBefore( element ), 1, this.document.version ); // eslint-disable-line no-invalid-this
 	delta.addOperation( remove );
-	this.document.applyOperation( remove );
+	this.document.applyOperation( remove ); // eslint-disable-line no-invalid-this
 
-	return this;
+	return this; // eslint-disable-line no-invalid-this
 } );
 
 DeltaFactory.register( UnwrapDelta );

+ 5 - 5
packages/ckeditor5-engine/src/model/delta/weakinsertdelta.js

@@ -49,19 +49,19 @@ export default class WeakInsertDelta extends InsertDelta {
  */
 register( 'weakInsert', function( position, nodes ) {
 	const delta = new WeakInsertDelta();
-	this.addDelta( delta );
+	this.addDelta( delta ); // eslint-disable-line no-invalid-this
 
 	nodes = normalizeNodes( nodes );
 
 	for ( const node of nodes ) {
-		node.setAttributesTo( this.document.selection.getAttributes() );
+		node.setAttributesTo( this.document.selection.getAttributes() ); // eslint-disable-line no-invalid-this
 	}
 
-	const operation = new InsertOperation( position, nodes, this.document.version );
+	const operation = new InsertOperation( position, nodes, this.document.version ); // eslint-disable-line no-invalid-this
 	delta.addOperation( operation );
-	this.document.applyOperation( operation );
+	this.document.applyOperation( operation ); // eslint-disable-line no-invalid-this
 
-	return this;
+	return this; // eslint-disable-line no-invalid-this
 } );
 
 DeltaFactory.register( WeakInsertDelta );

+ 13 - 6
packages/ckeditor5-engine/src/model/delta/wrapdelta.js

@@ -53,12 +53,14 @@ export default class WrapDelta extends Delta {
 		return range ? range.end.offset - range.start.offset : 0;
 	}
 
+	/* eslint-disable max-len */
 	/**
 	 * Operation that inserts wrapping element or `null` if there are no operations in the delta.
 	 *
 	 * @protected
 	 * @type {module:engine/model/operation/insertoperation~InsertOperation|module:engine/model/operation/reinsertoperation~ReinsertOperation}
 	 */
+	/* eslint-enable max-len */
 	get _insertOperation() {
 		return this.operations[ 0 ] || null;
 	}
@@ -135,18 +137,23 @@ register( 'wrap', function( range, elementOrString ) {
 	}
 
 	const delta = new WrapDelta();
-	this.addDelta( delta );
+	this.addDelta( delta ); // eslint-disable-line no-invalid-this
 
-	const insert = new InsertOperation( range.end, element, this.document.version );
+	const insert = new InsertOperation( range.end, element, this.document.version ); // eslint-disable-line no-invalid-this
 	delta.addOperation( insert );
-	this.document.applyOperation( insert );
+	this.document.applyOperation( insert ); // eslint-disable-line no-invalid-this
 
 	const targetPosition = Position.createFromParentAndOffset( element, 0 );
-	const move = new MoveOperation( range.start, range.end.offset - range.start.offset, targetPosition, this.document.version );
+	const move = new MoveOperation(
+		range.start,
+		range.end.offset - range.start.offset,
+		targetPosition,
+		this.document.version // eslint-disable-line no-invalid-this
+	);
 	delta.addOperation( move );
-	this.document.applyOperation( move );
+	this.document.applyOperation( move ); // eslint-disable-line no-invalid-this
 
-	return this;
+	return this; // eslint-disable-line no-invalid-this
 } );
 
 DeltaFactory.register( WrapDelta );

+ 5 - 3
packages/ckeditor5-engine/src/model/document.js

@@ -8,8 +8,10 @@
  */
 
 // Load all basic deltas and transformations, they register themselves, but they need to be imported somewhere.
-import deltas from './delta/basic-deltas'; // jshint ignore:line
-import transformations from './delta/basic-transformations'; // jshint ignore:line
+/* eslint-disable no-unused-vars */
+import deltas from './delta/basic-deltas';
+import transformations from './delta/basic-transformations';
+/* eslint-enable no-unused-vars */
 
 import Range from './range';
 import Position from './position';
@@ -311,7 +313,7 @@ export default class Document {
 		}
 
 		let backwardWalker;
-		let forwardWalker;
+		let forwardWalker; // eslint-disable-line one-var
 
 		if ( direction == 'both' || direction == 'backward' ) {
 			backwardWalker = new TreeWalker( { startPosition: position, direction: 'backward' } );

+ 1 - 1
packages/ckeditor5-engine/src/model/documentfragment.js

@@ -293,5 +293,5 @@ function normalize( nodes ) {
 	}
 
 	// Array.from to enable .map() on non-arrays.
-	return Array.from( nodes ).map( node => typeof node == 'string' ? new Text( node ) : node );
+	return Array.from( nodes ).map( node => typeof node == 'string' ? new Text( node ) : node ); // eslint-disable-line no-confusing-arrow
 }

+ 2 - 2
packages/ckeditor5-engine/src/model/element.js

@@ -238,7 +238,7 @@ export default class Element extends Node {
 	 * @returns {module:engine/model/node~Node}
 	 */
 	getNodeByPath( relativePath ) {
-		let node = this;
+		let node = this; // eslint-disable-line consistent-this
 
 		for ( const index of relativePath ) {
 			node = node.getChild( index );
@@ -311,5 +311,5 @@ function normalize( nodes ) {
 	}
 
 	// Array.from to enable .map() on non-arrays.
-	return Array.from( nodes ).map( node => typeof node == 'string' ? new Text( node ) : node );
+	return Array.from( nodes ).map( node => typeof node == 'string' ? new Text( node ) : node ); // eslint-disable-line no-confusing-arrow
 }

+ 5 - 5
packages/ckeditor5-engine/src/model/liveposition.js

@@ -138,12 +138,12 @@ function bindWithDocument() {
 	// Operation types handled by LivePosition (these are operations that change model tree structure).
 	const supportedTypes = new Set( [ 'insert', 'move', 'remove', 'reinsert' ] );
 
-	this.listenTo(
-		this.root.document,
+	this.listenTo( // eslint-disable-line no-invalid-this
+		this.root.document, // eslint-disable-line no-invalid-this
 		'change',
 		( event, type, changes ) => {
 			if ( supportedTypes.has( type ) ) {
-				transform.call( this, type, changes.range, changes.sourcePosition );
+				transform.call( this, type, changes.range, changes.sourcePosition ); // eslint-disable-line no-invalid-this
 			}
 		},
 		{ priority: 'high' }
@@ -161,8 +161,7 @@ function bindWithDocument() {
  * @param {module:engine/model/position~Position} [position] Additional position parameter provided by some change events.
  */
 function transform( type, range, position ) {
-	/* jshint validthis: true */
-
+	/* eslint-disable no-invalid-this, no-case-declarations */
 	const howMany = range.end.offset - range.start.offset;
 	let transformed;
 
@@ -199,6 +198,7 @@ function transform( type, range, position ) {
 
 		this.fire( 'change', oldPosition );
 	}
+	/* eslint-enable no-invalid-this, no-case-declarations */
 }
 
 mix( LivePosition, EmitterMixin );

+ 6 - 3
packages/ckeditor5-engine/src/model/liverange.js

@@ -98,12 +98,12 @@ function bindWithDocument() {
 	// Operation types that a range can be transformed by.
 	const supportedTypes = new Set( [ 'insert', 'move', 'remove', 'reinsert' ] );
 
-	this.listenTo(
-		this.root.document,
+	this.listenTo( // eslint-disable-line no-invalid-this
+		this.root.document, // eslint-disable-line no-invalid-this
 		'change',
 		( event, type, changes, batch, deltaType ) => {
 			if ( supportedTypes.has( type ) ) {
-				transform.call( this, type, deltaType, changes.range, changes.sourcePosition );
+				transform.call( this, type, deltaType, changes.range, changes.sourcePosition ); // eslint-disable-line no-invalid-this
 			}
 		},
 		{ priority: 'high' }
@@ -133,6 +133,7 @@ function transform( changeType, deltaType, targetRange, sourcePosition ) {
 		targetPosition = targetPosition._getTransformedByInsertion( sourcePosition, howMany );
 	}
 
+	// eslint-disable-next-line no-invalid-this
 	const result = this._getTransformedByDocumentChange( changeType, deltaType, targetPosition, howMany, sourcePosition );
 
 	// Decide whether moved part should be included in the range.
@@ -147,6 +148,7 @@ function transform( changeType, deltaType, targetRange, sourcePosition ) {
 
 	const updated = Range.createFromRanges( result );
 
+	/* eslint-disable no-invalid-this */
 	// If anything changed, update the range and fire an event.
 	if ( !updated.isEqual( this ) ) {
 		const oldRange = Range.createFromRange( this );
@@ -156,6 +158,7 @@ function transform( changeType, deltaType, targetRange, sourcePosition ) {
 
 		this.fire( 'change', oldRange );
 	}
+	/* eslint-enable no-invalid-this */
 }
 
 mix( LiveRange, EmitterMixin );

+ 2 - 2
packages/ckeditor5-engine/src/model/node.js

@@ -185,7 +185,7 @@ export default class Node {
 	 * @type {module:engine/model/node~Node|module:engine/model/documentfragment~DocumentFragment}
 	 */
 	get root() {
-		let root = this;
+		let root = this; // eslint-disable-line consistent-this
 
 		while ( root.parent ) {
 			root = root.parent;
@@ -238,7 +238,7 @@ export default class Node {
 	 */
 	getPath() {
 		const path = [];
-		let node = this;
+		let node = this; // eslint-disable-line consistent-this
 
 		while ( node.parent ) {
 			path.unshift( node.startOffset );

+ 2 - 1
packages/ckeditor5-engine/src/model/operation/attributeoperation.js

@@ -120,7 +120,8 @@ export default class AttributeOperation extends Operation {
 				 * @param {*} value
 				 */
 				throw new CKEditorError(
-					'attribute-operation-wrong-old-value: Changed node has different attribute value than operation\'s old attribute value.',
+					'attribute-operation-wrong-old-value: Changed node has different attribute value than operation\'s ' +
+					'old attribute value.',
 					{ item, key: this.key, value: this.oldValue }
 				);
 			}

+ 1 - 2
packages/ckeditor5-engine/src/model/operation/insertoperation.js

@@ -11,8 +11,7 @@ import Operation from './operation';
 import Position from '../position';
 import NodeList from '../nodelist';
 import RemoveOperation from './removeoperation';
-import writer from './../writer';
-import { normalizeNodes } from './../writer';
+import { writer, normalizeNodes } from './../writer';
 import Text from '../text';
 import Element from '../element';
 

+ 2 - 1
packages/ckeditor5-engine/src/model/operation/rootattributeoperation.js

@@ -104,7 +104,8 @@ export default class RootAttributeOperation extends Operation {
 			 * @param {*} value
 			 */
 			throw new CKEditorError(
-				'rootattribute-operation-wrong-old-value: Changed node has different attribute value than operation\'s old attribute value.',
+				'rootattribute-operation-wrong-old-value: Changed node has different attribute value than operation\'s ' +
+				'old attribute value.',
 				{ root: this.root, key: this.key }
 			);
 		}

+ 20 - 4
packages/ckeditor5-engine/src/model/operation/transform.js

@@ -430,8 +430,20 @@ const ot = {
 			const difference = joinRanges( rangeA.getDifference( rangeB ) );
 
 			if ( difference ) {
-				difference.start = difference.start._getTransformedByMove( b.sourcePosition, b.targetPosition, b.howMany, !a.isSticky, false );
-				difference.end = difference.end._getTransformedByMove( b.sourcePosition, b.targetPosition, b.howMany, a.isSticky, false );
+				difference.start = difference.start._getTransformedByMove(
+					b.sourcePosition,
+					b.targetPosition,
+					b.howMany,
+					!a.isSticky,
+					false
+				);
+				difference.end = difference.end._getTransformedByMove(
+					b.sourcePosition,
+					b.targetPosition,
+					b.howMany,
+					a.isSticky,
+					false
+				);
 
 				ranges.push( difference );
 			}
@@ -461,7 +473,11 @@ const ot = {
 			// Also if we wouldn't do that, we would get different results on both sides of transformation (i.e. in
 			// collaborative editing).
 			const aIsInside = rangeB.containsRange( rangeA ) &&
-				( rangeB.containsPosition( a.targetPosition ) || rangeB.start.isEqual( a.targetPosition ) || rangeB.end.isEqual( a.targetPosition ) );
+				(
+					rangeB.containsPosition( a.targetPosition ) ||
+					rangeB.start.isEqual( a.targetPosition ) ||
+					rangeB.end.isEqual( a.targetPosition )
+				);
 
 			if ( common !== null && ( aCompB === 'extension' || ( aCompB === 'same' && isStrong ) || aIsInside ) && !bTargetsToA ) {
 				// Here we do not need to worry that newTargetPosition is inside moved range, because that
@@ -535,7 +551,7 @@ const ot = {
 
 function transform( a, b, isStrong ) {
 	let group;
-	let algorithm;
+	let algorithm; // eslint-disable-line one-var
 
 	if ( a instanceof InsertOperation ) {
 		group = ot.InsertOperation;

+ 33 - 8
packages/ckeditor5-engine/src/model/range.js

@@ -90,7 +90,8 @@ export default class Range {
 	 * Checks whether this range contains given {@link module:engine/model/position~Position position}.
 	 *
 	 * @param {module:engine/model/position~Position} position Position to check.
-	 * @returns {Boolean} `true` if given {@link module:engine/model/position~Position position} is contained in this range, `false` otherwise.
+	 * @returns {Boolean} `true` if given {@link module:engine/model/position~Position position} is contained in this range,
+	 * `false` otherwise.
 	 */
 	containsPosition( position ) {
 		return position.isAfter( this.start ) && position.isBefore( this.end );
@@ -452,7 +453,11 @@ export default class Range {
 		} else {
 			const sourceRange = Range.createFromPositionAndShift( sourcePosition, howMany );
 
-			if ( deltaType == 'merge' && this.isCollapsed && ( this.start.isEqual( sourceRange.start ) || this.start.isEqual( sourceRange.end ) ) ) {
+			if (
+				deltaType == 'merge' &&
+				this.isCollapsed &&
+				( this.start.isEqual( sourceRange.start ) || this.start.isEqual( sourceRange.end ) )
+			) {
 				// Collapsed range is in merged element.
 				// Without fix, the range would end up in the graveyard, together with removed element.
 				// <p>foo</p><p>[]bar</p> -> <p>foobar</p><p>[]</p> -> <p>foobar</p> -> <p>foo[]bar</p>
@@ -464,8 +469,15 @@ export default class Range {
 				// <p>xx</p>^<w>{<p>a[b</p>}</w><p>c]d</p>   -->   <p>xx</p><p>a[b</p><w></w><p>c]d</p>
 				// ^<p>xx</p><w>{<p>a[b</p>}</w><p>c]d</p>   -->   <p>a[b</p><p>xx</p><w></w><p>c]d</p>  // Note <p>xx</p> inclusion.
 				// <w>{<p>a[b</p>}</w>^<p>c]d</p>            -->   <w></w><p>a[b</p><p>c]d</p>
-				if ( sourceRange.containsPosition( this.start ) && this.containsPosition( sourceRange.end ) && this.end.isAfter( targetPosition ) ) {
-					const start = this.start._getCombined( sourcePosition, targetPosition._getTransformedByDeletion( sourcePosition, howMany ) );
+				if (
+					sourceRange.containsPosition( this.start ) &&
+					this.containsPosition( sourceRange.end ) &&
+					this.end.isAfter( targetPosition )
+				) {
+					const start = this.start._getCombined(
+						sourcePosition,
+						targetPosition._getTransformedByDeletion( sourcePosition, howMany )
+					);
 					const end = this.end._getTransformedByMove( sourcePosition, targetPosition, howMany, false, false );
 
 					return [ new Range( start, end ) ];
@@ -475,9 +487,22 @@ export default class Range {
 				// <p>c[d</p><w>{<p>a]b</p>}</w>^<p>xx</p>   -->   <p>c[d</p><w></w><p>a]b</p><p>xx</p>
 				// <p>c[d</p><w>{<p>a]b</p>}</w><p>xx</p>^   -->   <p>c[d</p><w></w><p>xx</p><p>a]b</p>  // Note <p>xx</p> inclusion.
 				// <p>c[d</p>^<w>{<p>a]b</p>}</w>            -->   <p>c[d</p><p>a]b</p><w></w>
-				if ( sourceRange.containsPosition( this.end ) && this.containsPosition( sourceRange.start ) && this.start.isBefore( targetPosition ) ) {
-					const start = this.start._getTransformedByMove( sourcePosition, targetPosition, howMany, true, false );
-					const end = this.end._getCombined( sourcePosition, targetPosition._getTransformedByDeletion( sourcePosition, howMany ) );
+				if (
+					sourceRange.containsPosition( this.end ) &&
+					this.containsPosition( sourceRange.start ) &&
+					this.start.isBefore( targetPosition )
+				) {
+					const start = this.start._getTransformedByMove(
+						sourcePosition,
+						targetPosition,
+						howMany,
+						true,
+						false
+					);
+					const end = this.end._getCombined(
+						sourcePosition,
+						targetPosition._getTransformedByDeletion( sourcePosition, howMany )
+					);
 
 					return [ new Range( start, end ) ];
 				}
@@ -701,7 +726,7 @@ export default class Range {
 		const ref = ranges[ 0 ];
 
 		// 2. Sort all the ranges so it's easier to process them.
-		ranges.sort( ( a, b ) => a.start.isAfter( b.start ) ? 1 : -1 );
+		ranges.sort( ( a, b ) => a.start.isAfter( b.start ) ? 1 : -1 ); // eslint-disable-line no-confusing-arrow
 
 		// 3. Check at which index the reference range is now.
 		const refIndex = ranges.indexOf( ref );

+ 2 - 1
packages/ckeditor5-engine/src/model/rootelement.js

@@ -19,7 +19,8 @@ export default class RootElement extends Element {
 	 *
 	 * @param {module:engine/model/document~Document} doc Document that is an owner of this root.
 	 * @param {String} name Node name.
-	 * @param {String} [rootName='main'] Unique root name used to identify this root element by {@link module:engine/model/document~Document}.
+	 * @param {String} [rootName='main'] Unique root name used to identify this root
+	 * element by {@link module:engine/model/document~Document}.
 	 */
 	constructor( doc, name, rootName = 'main' ) {
 		super( name );

+ 3 - 1
packages/ckeditor5-engine/src/model/selection.js

@@ -406,7 +406,9 @@ export default class Selection {
 			 *
 			 * @error model-selection-setFocus-no-ranges
 			 */
-			throw new CKEditorError( 'model-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.' );
+			throw new CKEditorError(
+				'model-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.'
+			);
 		}
 
 		const newFocus = Position.createAt( itemOrPosition, offset );

+ 4 - 6
packages/ckeditor5-engine/src/model/treewalker.js

@@ -232,7 +232,7 @@ export default class TreeWalker {
 
 			return formatReturnValue( 'elementStart', node, previousPosition, position, 1 );
 		} else if ( node instanceof Text ) {
-			let charactersCount, offsetInTextNode;
+			let charactersCount;
 
 			if ( this.singleCharacters ) {
 				charactersCount = 1;
@@ -246,8 +246,7 @@ export default class TreeWalker {
 				charactersCount = offset - position.offset;
 			}
 
-			offsetInTextNode = position.offset - node.startOffset;
-
+			const offsetInTextNode = position.offset - node.startOffset;
 			const item = new TextProxy( node, offsetInTextNode, charactersCount );
 
 			position.offset += charactersCount;
@@ -314,7 +313,7 @@ export default class TreeWalker {
 				return formatReturnValue( 'elementStart', node, previousPosition, position, 1 );
 			}
 		} else if ( node instanceof Text ) {
-			let charactersCount, offsetInTextNode;
+			let charactersCount;
 
 			if ( this.singleCharacters ) {
 				charactersCount = 1;
@@ -328,8 +327,7 @@ export default class TreeWalker {
 				charactersCount = position.offset - offset;
 			}
 
-			offsetInTextNode = position.offset - node.startOffset;
-
+			const offsetInTextNode = position.offset - node.startOffset;
 			const item = new TextProxy( node, offsetInTextNode - charactersCount, charactersCount );
 
 			position.offset -= charactersCount;

+ 3 - 4
packages/ckeditor5-engine/src/model/writer.js

@@ -125,13 +125,13 @@ export function move( sourceRange, targetPosition ) {
 			'Trying to move a range that starts and ends in different element.' );
 	}
 
-	const nodes = this.remove( sourceRange );
+	const nodes = this.remove( sourceRange ); // eslint-disable-line no-invalid-this
 
 	// We have to fix `targetPosition` because model changed after nodes from `sourceRange` got removed and
 	// that change might have an impact on `targetPosition`.
 	targetPosition = targetPosition._getTransformedByDeletion( sourceRange.start, sourceRange.end.offset - sourceRange.start.offset );
 
-	return this.insert( targetPosition, nodes );
+	return this.insert( targetPosition, nodes ); // eslint-disable-line no-invalid-this
 }
 
 /**
@@ -174,8 +174,7 @@ export function setAttribute( range, key, value ) {
  * @param {String} key Key of attribute to remove.
  */
 export function removeAttribute( range, key ) {
-	/* jshint validthis:true */
-	this.setAttribute( range, key, null );
+	this.setAttribute( range, key, null ); // eslint-disable-line no-invalid-this
 }
 
 /**

+ 2 - 4
packages/ckeditor5-engine/src/view/attributeelement.js

@@ -100,14 +100,12 @@ AttributeElement.DEFAULT_PRIORITY = DEFAULT_PRIORITY;
 //
 // @returns {Number|null} Block filler offset or `null` if block filler is not needed.
 function getFillerOffset() {
-	/* jshint validthis:true */
-
 	// <b>foo</b> does not need filler.
-	if ( this.childCount ) {
+	if ( this.childCount ) { // eslint-disable-line no-invalid-this
 		return null;
 	}
 
-	let element = this.parent;
+	let element = this.parent; // eslint-disable-line no-invalid-this
 
 	// <p><b></b></p> needs filler -> <p><b><br></b></p>
 	while ( element && element.is( 'attributeElement' ) ) {

+ 1 - 2
packages/ckeditor5-engine/src/view/containerelement.js

@@ -78,6 +78,5 @@ export default class ContainerElement extends Element {
 //
 // @returns {Number|null} Block filler offset or `null` if block filler is not needed.
 function getFillerOffset() {
-	/* jshint validthis:true */
-	return this.childCount === 0 ? 0 : null;
+	return this.childCount === 0 ? 0 : null; // eslint-disable-line no-invalid-this
 }

+ 4 - 2
packages/ckeditor5-engine/src/view/document.js

@@ -63,7 +63,8 @@ export default class Document {
 
 		/**
 		 * Instance of the {@link module:engine/view/domconverter~DomConverter domConverter} use by
-		 * {@link module:engine/view/document~Document#renderer renderer} and {@link module:engine/view/observer/observer~Observer observers}.
+		 * {@link module:engine/view/document~Document#renderer renderer}
+		 * and {@link module:engine/view/observer/observer~Observer observers}.
 		 *
 		 * @readonly
 		 * @member {module:engine/view/domconverter~DomConverter} module:engine/view/document~Document#domConverter
@@ -182,7 +183,8 @@ export default class Document {
 	 *		document.createRoot( 'body' );
 	 *		document.attachDomRoot( document.querySelector( 'body#editor' ) );
 	 *
-	 * In both cases, {@link module:engine/view/rooteditableelement~RootEditableElement#rootName element name} is always transformed to lower
+	 * In both cases, {@link module:engine/view/rooteditableelement~RootEditableElement#rootName element name} is always
+	 * transformed to lower
 	 * case.
 	 *
 	 * @param {Element|String} domRoot DOM root element or the tag name of view root element if the DOM element will be

+ 1 - 1
packages/ckeditor5-engine/src/view/documentfragment.js

@@ -207,5 +207,5 @@ function normalize( nodes ) {
 	}
 
 	// Array.from to enable .map() on non-arrays.
-	return Array.from( nodes ).map( node => typeof node == 'string' ? new Text( node ) : node );
+	return Array.from( nodes ).map( node => typeof node == 'string' ? new Text( node ) : node ); // eslint-disable-line no-confusing-arrow
 }

+ 13 - 8
packages/ckeditor5-engine/src/view/domconverter.js

@@ -100,7 +100,8 @@ export default class DomConverter {
 
 	/**
 	 * Binds given DOM element that represents fake selection to {@link module:engine/view/selection~Selection view selection}.
-	 * View selection copy is stored and can be retrieved by {@link module:engine/view/domconverter~DomConverter#fakeSelectionToView} method.
+	 * View selection copy is stored and can be retrieved by {@link module:engine/view/domconverter~DomConverter#fakeSelectionToView}
+	 * method.
 	 *
 	 * @param {HTMLElement} domElement
 	 * @param {module:engine/view/selection~Selection} viewSelection
@@ -110,8 +111,8 @@ export default class DomConverter {
 	}
 
 	/**
-	 * Returns {@link module:engine/view/selection~Selection view selection} instance corresponding to given DOM element that represents fake
-	 * selection. Returns `undefined` if binding to given DOM element does not exists.
+	 * Returns {@link module:engine/view/selection~Selection view selection} instance corresponding to given DOM element that represents
+	 * fake selection. Returns `undefined` if binding to given DOM element does not exists.
 	 *
 	 * @param {HTMLElement} domElement
 	 * @returns {module:engine/view/selection~Selection|undefined}
@@ -343,9 +344,8 @@ export default class DomConverter {
 	 * @param {Boolean} [options.bind=false] Determines whether new elements will be bound.
 	 * @param {Boolean} [options.withChildren=true] If `true`, node's and document fragment's children will be converted too.
 	 * @param {Boolean} [options.keepOriginalCase=false] If `false`, node's tag name will be converter to lower case.
-	 * @returns {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment|null} Converted node or document fragment or
-	 * `null`
-	 * if DOM node is a {@link module:engine/view/filler filler} or the given node is an empty text node.
+	 * @returns {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment|null} Converted node or document fragment
+	 * or `null` if DOM node is a {@link module:engine/view/filler filler} or the given node is an empty text node.
 	 */
 	domToView( domNode, options = {} ) {
 		if ( isBlockFiller( domNode, this.blockFiller ) ) {
@@ -542,7 +542,8 @@ export default class DomConverter {
 	 * Gets corresponding view item. This function use
 	 * {@link module:engine/view/domconverter~DomConverter#getCorrespondingViewElement getCorrespondingViewElement}
 	 * for elements, {@link  module:engine/view/domconverter~DomConverter#getCorrespondingViewText getCorrespondingViewText} for text
-	 * nodes and {@link module:engine/view/domconverter~DomConverter#getCorrespondingViewDocumentFragment getCorrespondingViewDocumentFragment}
+	 * nodes and
+	 * {@link module:engine/view/domconverter~DomConverter#getCorrespondingViewDocumentFragment getCorrespondingViewDocumentFragment}
 	 * for document fragments.
 	 *
 	 * Note that for the block or inline {@link module:engine/view/filler filler} this method returns `null`.
@@ -1018,7 +1019,11 @@ export default class DomConverter {
 			// If there is common ancestor between the text node and next/prev text node,
 			// and there are no block elements on a way from the text node to that ancestor,
 			// and there are no block elements on a way from next/prev text node to that ancestor...
-			if ( lca && !_hasDomParentOfType( node, this.blockElements, lca ) && !_hasDomParentOfType( touchingNode, this.blockElements, lca ) ) {
+			if (
+				lca &&
+				!_hasDomParentOfType( node, this.blockElements, lca ) &&
+				!_hasDomParentOfType( touchingNode, this.blockElements, lca )
+			) {
 				// Then they are in the same container element.
 				return touchingNode;
 			}

+ 4 - 4
packages/ckeditor5-engine/src/view/element.js

@@ -187,8 +187,8 @@ export default class Element extends Node {
 	}
 
 	/**
-	 * {@link module:engine/view/element~Element#insertChildren Insert} a child node or a list of child nodes at the end of this node and sets
-	 * the parent of these nodes to this element.
+	 * {@link module:engine/view/element~Element#insertChildren Insert} a child node or a list of child nodes at the end of this node
+	 * and sets the parent of these nodes to this element.
 	 *
 	 * @fires module:engine/view/node~Node#change
 	 * @param {module:engine/view/node~Node|Iterable.<module:engine/view/node~Node>} nodes Node or the list of nodes to be inserted.
@@ -730,7 +730,7 @@ function parseInlineStyles( stylesMap, stylesString ) {
 
 					break;
 
-				case ';':
+				case ';':  // eslint-disable-line no-case-declarations
 					// Property value just ended.
 					// Use previously stored property value start to obtain property value.
 					const propertyValue = stylesString.substr( propertyValueStart, i - propertyValueStart );
@@ -780,5 +780,5 @@ function normalize( nodes ) {
 	}
 
 	// Array.from to enable .map() on non-arrays.
-	return Array.from( nodes ).map( node => typeof node == 'string' ? new Text( node ) : node );
+	return Array.from( nodes ).map( node => typeof node == 'string' ? new Text( node ) : node ); // eslint-disable-line no-confusing-arrow
 }

+ 2 - 2
packages/ckeditor5-engine/src/view/emptyelement.js

@@ -49,8 +49,8 @@ export default class EmptyElement extends Element {
 
 	/**
 	 * Overrides {@link module:engine/view/element~Element#insertChildren} method.
-	 * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-emptyelement-cannot-add` to prevent adding any child nodes
-	 * to EmptyElement.
+	 * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-emptyelement-cannot-add` to prevent
+	 * adding any child nodes to EmptyElement.
 	 */
 	insertChildren( index, nodes ) {
 		if ( nodes && ( nodes instanceof Node || Array.from( nodes ).length > 0 ) ) {

+ 1 - 1
packages/ckeditor5-engine/src/view/node.js

@@ -92,7 +92,7 @@ export default class Node {
 	 * @type {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment}
 	 */
 	get root() {
-		let root = this;
+		let root = this; // eslint-disable-line consistent-this
 
 		while ( root.parent ) {
 			root = root.parent;

+ 1 - 1
packages/ckeditor5-engine/src/view/observer/mutationobserver.js

@@ -139,7 +139,7 @@ export default class MutationObserver extends Observer {
 
 		const domConverter = this.domConverter;
 
-		// Use map and set for deduplication.
+		// Use map and set for deduplication.
 		const mutatedTexts = new Map();
 		const mutatedElements = new Set();
 

+ 4 - 2
packages/ckeditor5-engine/src/view/observer/selectionobserver.js

@@ -32,8 +32,8 @@ export default class SelectionObserver extends Observer {
 
 		/**
 		 * Instance of the mutation observer. Selection observer calls
-		 * {@link module:engine/view/observer/mutationobserver~MutationObserver#flush} to ensure that the mutations will be handled before the
-		 * {@link module:engine/view/document~Document#event:selectionChange} event is fired.
+		 * {@link module:engine/view/observer/mutationobserver~MutationObserver#flush} to ensure that the mutations will be handled
+		 * before the {@link module:engine/view/document~Document#event:selectionChange} event is fired.
 		 *
 		 * @readonly
 		 * @member {module:engine/view/observer/mutationobserver~MutationObserver}
@@ -57,12 +57,14 @@ export default class SelectionObserver extends Observer {
 		 */
 		this.selection = document.selection;
 
+		/* eslint-disable max-len */
 		/**
 		 * Reference to the {@link module:engine/view/document~Document#domConverter}.
 		 *
 		 * @readonly
 		 * @member {module:engine/view/domconverter~DomConverter} module:engine/view/observer/selectionobserver~SelectionObserver#domConverter
 		 */
+		/* eslint-enable max-len */
 		this.domConverter = document.domConverter;
 
 		/**

+ 2 - 1
packages/ckeditor5-engine/src/view/range.js

@@ -161,7 +161,8 @@ export default class Range {
 	 * Checks whether this range contains given {@link module:engine/view/position~Position position}.
 	 *
 	 * @param {module:engine/view/position~Position} position Position to check.
-	 * @returns {Boolean} `true` if given {@link module:engine/view/position~Position position} is contained in this range, `false` otherwise.
+	 * @returns {Boolean} `true` if given {@link module:engine/view/position~Position position} is contained in this range,
+	 * `false` otherwise.
 	 */
 	containsPosition( position ) {
 		return position.isAfter( this.start ) && position.isBefore( this.end );

+ 4 - 1
packages/ckeditor5-engine/src/view/renderer.js

@@ -587,7 +587,10 @@ export default class Renderer {
 				currentSelection: this.selection
 			};
 
-			log.warn( 'renderer-skipped-selection-rendering: The selection was not rendered due to its similarity to the current one.', data );
+			log.warn(
+				'renderer-skipped-selection-rendering: The selection was not rendered due to its similarity to the current one.',
+				data
+			);
 
 			return;
 		}

+ 1 - 1
packages/ckeditor5-engine/src/view/writer.js

@@ -1192,7 +1192,7 @@ function rangeSpansOnAllChildren( range ) {
 // |module:engine/view/containerelement~ContainerElement> nodes
 function validateNodesToInsert( nodes ) {
 	for ( const node of nodes ) {
-		if ( !validNodesToInsert.some( ( validNode => node instanceof validNode ) ) ) {
+		if ( !validNodesToInsert.some( ( validNode => node instanceof validNode ) ) ) { // eslint-disable-line no-use-before-define
 			/**
 			 * Inserted nodes should be valid to insert. of {@link module:engine/view/attributeelement~AttributeElement AttributeElement},
 			 * {@link module:engine/view/containerelement~ContainerElement ContainerElement},

+ 0 - 0
packages/ckeditor5-engine/test.js