function findMatches()

in lib/resources/script.js [99:153]


function findMatches(index, query) {
  if (query === '') {
    return [];
  }

  const allMatches = [];

  index.forEach(element => {
    function score(value) {
      value -= element.overriddenDepth * 10;
      const weightFactor = weights[element.type] || 4;
      allMatches.push({element: element, score: (value / weightFactor) >> 0});
    }

    const name = element.name;
    const qualifiedName = element.qualifiedName;
    const lowerName = name.toLowerCase();
    const lowerQualifiedName = qualifiedName.toLowerCase();
    const lowerQuery = query.toLowerCase();

    if (name === query || qualifiedName === query || name === `dart:${query}`) {
      score(2000);
    } else if (lowerName === `dart:${lowerQuery}`) {
      score(1800);
    } else if (lowerName === lowerQuery || lowerQualifiedName === lowerQuery) {
      score(1700);
    } else if (query.length > 1) {
      if (name.startsWith(query) || qualifiedName.startsWith(query)) {
        score(750);
      } else if (lowerName.startsWith(lowerQuery) || lowerQualifiedName.startsWith(lowerQuery)) {
        score(650);
      } else if (name.includes(query) || qualifiedName.includes(query)) {
        score(500);
      } else if (lowerName.includes(lowerQuery) || lowerQualifiedName.includes(query)) {
        score(400);
      }
    }
  });

  allMatches.sort((a, b) => {
    const x = b.score - a.score;
    if (x === 0) {
      return a.element.name.length - b.element.name.length;
    }
    return x;
  });

  const justElements = [];

  for (let i = 0; i < allMatches.length; i++) {
    justElements.push(allMatches[i].element);
  }

  return justElements;
}