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:
		@ -219,6 +219,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -241,6 +242,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -257,6 +259,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -274,6 +277,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -287,6 +291,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -300,6 +305,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -315,6 +321,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -332,6 +339,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -353,6 +361,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -368,6 +377,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -405,6 +415,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -421,6 +432,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -438,6 +450,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -451,6 +464,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -464,6 +478,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -479,6 +494,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -496,6 +512,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -530,6 +547,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -597,6 +615,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -621,6 +640,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -636,6 +656,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -673,6 +694,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -689,6 +711,7 @@ uuid |
 | 
			
		||||
	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 +729,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -719,6 +743,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -732,6 +757,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -747,6 +773,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -764,6 +791,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -785,6 +813,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
@ -800,6 +829,7 @@ uuid |
 | 
			
		||||
	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,
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user