add serializer for acorn Position

This commit is contained in:
Tobias Koppers 2018-10-29 22:16:40 +01:00
parent 601824ea1e
commit e9db83c6c7
2 changed files with 32 additions and 2 deletions

View File

@ -7,6 +7,7 @@
const ObjectMiddleware = require("../serialization/ObjectMiddleware");
const Position = /** @type {TODO} */ (require("acorn")).Position;
const SourceLocation = require("acorn").SourceLocation;
const CachedSource = require("webpack-sources").CachedSource;
const ConcatSource = require("webpack-sources").ConcatSource;
@ -17,6 +18,7 @@ const ReplaceSource = require("webpack-sources").ReplaceSource;
const SourceMapSource = require("webpack-sources").SourceMapSource;
/** @typedef {import("../Dependency").RealDependencyLocation} RealDependencyLocation */
/** @typedef {import("../Dependency").SourcePosition} SourcePosition */
const CURRENT_MODULE = "webpack/lib/util/registerExternalSerializer";
@ -234,6 +236,34 @@ ObjectMiddleware.register(
}()
);
ObjectMiddleware.register(
Position,
CURRENT_MODULE,
"acorn/Position",
new class PositionSerializer {
/**
* @param {Position} pos the position to be serialized
* @param {ObjectMiddleware.ObjectSerializerContext} context context
* @returns {void}
*/
serialize(pos, { write }) {
write(pos.line);
write(pos.column);
}
/**
* @param {ObjectMiddleware.ObjectDeserializerContext} context context
* @returns {SourcePosition} position
*/
deserialize({ read }) {
return {
line: read(),
column: read()
};
}
}()
);
ObjectMiddleware.register(
SourceMapSource,
CURRENT_MODULE,

View File

@ -82,12 +82,12 @@ const schema = [
},
{
title: "imports",
regexp: /(const (\{\s+\w+(,\s+\w+)*\s+\}|\w+) = require\("[^"]+"\)(\.\w+)*;\n)+\n/g,
regexp: /(const (\{\s+\w+(,\s+\w+)*\s+\}|\w+) = (\/\*\* @type \{TODO\} \*\/\s\()?require\("[^"]+"\)\)?(\.\w+)*;\n)+\n/g,
updateMessage: "sort imports alphabetically",
update(content) {
const items = execToArray(
content,
/const (?:\{\s+\w+(?:,\s+\w+)*\s+\}|\w+) = require\("([^"]+)"\)((?:\.\w+)*);\n/g
/const (?:\{\s+\w+(?:,\s+\w+)*\s+\}|\w+) = (?:\/\*\* @type \{TODO\} \*\/\s\()?require\("([^"]+)"\)\)?((?:\.\w+)*);\n/g
);
items.sort(sortImport);
return items.map(item => item.content).join("") + "\n";