Add a position-independent digest of the AST (#2962)
Each AST node contains an Option<Digest> which can be optionally set by running compute_digest() over the AST. This will mutate the AST and set the Digest. Fundamentally, the digest is computed from the digest of AST children nodes (using compute_digest) or the explicit raw underlying value. The underlying hash is changeable by modifying the macro and Digest type alias, and should enable us to determine when an AST -- or fragment of AST -- is the same. This won't hash the start/end of the AST fragment, so it's, to some extent, position independent. It will hash newlines, comments, etc, which may change in the future depending on how we wind up using this.
This commit is contained in:
		@ -105,6 +105,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	id: uuid,
 | 
			
		||||
	length: number,
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -127,6 +128,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -143,6 +145,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -160,6 +163,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -173,6 +177,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -186,6 +191,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -201,6 +207,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -218,6 +225,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -239,6 +247,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	sourceRange: [number, number],
 | 
			
		||||
	// The tag.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -254,6 +263,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	sourceRange: [number, number],
 | 
			
		||||
	// The tag.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -291,6 +301,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -307,6 +318,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -324,6 +336,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -337,6 +350,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -350,6 +364,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -365,6 +380,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -382,6 +398,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -395,6 +412,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
* `tag`: `TagDeclarator` (OPTIONAL)
 | 
			
		||||
```js
 | 
			
		||||
{
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -461,6 +479,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	id: uuid,
 | 
			
		||||
	length: number,
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -483,6 +502,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -499,6 +519,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -516,6 +537,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -529,6 +551,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -542,6 +565,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -557,6 +581,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -574,6 +599,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -595,6 +621,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	sourceRange: [number, number],
 | 
			
		||||
	// The tag.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -610,6 +637,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	sourceRange: [number, number],
 | 
			
		||||
	// The tag.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -647,6 +675,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -663,6 +692,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -680,6 +710,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -693,6 +724,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -706,6 +738,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -721,6 +754,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
@ -738,6 +772,7 @@ const example = extrude(10, exampleSketch)
 | 
			
		||||
	from: [number, number],
 | 
			
		||||
	// The tag of the path.
 | 
			
		||||
	tag: {
 | 
			
		||||
	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
 | 
			
		||||
	end: number,
 | 
			
		||||
	start: number,
 | 
			
		||||
	value: string,
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user