start . me .
Directory path . web .

HTML Document File : name-hint.html

<!doctype html>
<title>name hint</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8">

<!-- <script src="name-hint.js"></script> -->
<input type="text" id="name_input" oninput="update_name_hint(event.target)">
<pre id="hints"></pre>
<script>
// name-hint.js

var test_suite=[
"name1 name2",
"name2",
"name1",
"name1 name2 name3",
]

function get_hints(input){
	var results = test_suite.filter(_=>_.startsWith(input))
	return results
}

//console.log(common_beginning(test_suite))

function common_beginning(string_list){
	var common=""
	var index=0
	if(string_list[0]===undefined) return common
	while(true){
		var reference=string_list[0][index]
		if(reference===undefined) return common
		
		for(var current of string_list){
			var got=current[index]
			if(got===undefined) return common
			if(got!=reference) return common
		}
		common+=reference
		index+=1
	}
	return common
}
</script>
<script>
var previous_hints_length
var previous_content=""
update_name_hint(document.getElementById("name_input"))
function update_name_hint(target){
	var hints=get_hints(target.value)
	
	if(hints.length==0){
		document.getElementById("hints").innerText="(no hints)"
		previous_content=target.value
		return
	}
	
	var common_begin = common_beginning(hints)
	
	if(target.value.length>=previous_content.length)
		target.value = common_begin
	
	hints=get_hints(target.value)
	if(previous_hints_length>1 && hints.length==1) target.value=hints[0]
	previous_hints_length=hints.length
	document.getElementById("hints").innerText=hints.join("\n")
	previous_content=target.value
}
</script>