code: function getCompatibilityInfoForVersion(extVersion, apiVersion) {
          var requiredVersion = (extVersion.brackets || (extVersion.engines && extVersion.engines.brackets)),
              result = {};
          result.isCompatible = !requiredVersion || semver.satisfies(apiVersion, requiredVersion);
          if (result.isCompatible) {
              result.compatibleVersion = extVersion.version;
          } else {
              // Find out reason for incompatibility
              if (requiredVersion.charAt(0) === '<') {
                  result.requiresNewer = false;
              } else if (requiredVersion.charAt(0) === '>') {
                  result.requiresNewer = true;
              } else if (requiredVersion.charAt(0) === "~") {
                  var compareVersion = requiredVersion.slice(1);
                  // Need to add .0s to this style of range in order to compare (since valid version
                  // numbers must have major/minor/patch).
                  if (compareVersion.match(/^[0-9]+$/)) {
                      compareVersion += ".0.0";
                  } else if (compareVersion.match(/^[0-9]+\.[0-9]+$/)) {
                      compareVersion += ".0";
                  }
                  result.requiresNewer = semver.lt(apiVersion, compareVersion);
              }
          }
          return result;
      }
docs: Determines if the given versions[] entry is compatible with the given Brackets API version, and if not
  specifies why.
  @param {Object} extVersion
  @param {string} apiVersion
  @return {{isCompatible: boolean, requiresNewer: ?boolean, compatibleVersion: ?string}}