anchor.diff:    int charSet;
     bool trimWhitespace;
     bool insertFinalNewline;
  -  Future whenReady;
  -
  -  EditorConfig(workspace.File file) {
  -    ConfigSectionMatcher matcher = new ConfigSectionMatcher(file);
  -    whenReady = matcher.getSections().then((_) {
  -      // indent_style
  -      useSpaces = _propertyToBool(matcher, "indent_style", trueValue: "space",
  -          falseValue: "tab");
  -
  -      // tab_width
  -      String value = matcher.getValue("tab_width");
  -      if (value == null) {
  -        matcher.getValue("indent_size");
  -      }
  -
  -      tabWidth = int.parse(value);
  -      if (tabWidth.toString() != value || tabWidth < 1) {
  -        throw new EditorConfigException.forProperty("tab_width", value);
  -      }
  -
  -      // indent_size
  -      value = matcher.getValue("indent_size");
  -      if (value == "tab") {
  -        indentSize = tabWidth;
  -      } else {
  -        indentSize = int.parse(value);
  -        if (indentSize.toString() != value || indentSize < 1) {
  -          throw new EditorConfigException.forProperty("indent_size", value);
  -        }
  -      }
  -
  -      // end_of_line
  -      value = matcher.getValue("end_of_line");
  -      if (value == "cr") {
  -        lineEnding = ENDING_CR;
  -      } else if (value == "lf") {
  -        lineEnding = ENDING_LF;
  -      } else if (value == "crlf") {
  -        lineEnding = ENDING_CRLF;
  -      } else {
  -        throw new EditorConfigException.forProperty("end_of_line", value);
  -      }
  -
  -      // charset
  -      value = matcher.getValue("charset");
  -      if (value == "latin1") {
  -        charSet = CHARSET_LATIN;
  -      } else if (value == "utf-8") {
  -        charSet = CHARSET_UTF8;
  -      } else if (value == "utf-8-bom") {
  -        charSet = CHARSET_UTF8BOM;
  -      } else if (value == "utf-16be") {
  -        charSet = CHARSET_UTF16BE;
  -      } else if (value == "utf-16le") {
  -        charSet = CHARSET_UTF16LE;
  -      } else {
  -        throw new EditorConfigException.forProperty("charset", value);
  -      }
  -
  -      // trim_trailing_whitespace
  -      trimWhitespace = _propertyToBool(matcher, "trim_trailing_whitespace");
  -
  -      // insert_final_newline
  -      insertFinalNewline = _propertyToBool(matcher, "insert_final_newline");
  -    });
  -  }
  -
  -  bool _propertyToBool(ConfigSectionMatcher matcher, String propertyName,
  +
  +  ConfigFileContext _context;
  +
  +  EditorConfig(ConfigContainerContext containerContext, workspace.File file) {
  +    _context = new ConfigFileContext(containerContext);
  +    // indent_style
  +    useSpaces = _propertyToBool("indent_style", trueValue: "space",
  +        falseValue: "tab");
  +
  +    // tab_width
  +    String value = _context.getValue("tab_width");
  +    if (value == null) {
  +      _context.getValue("indent_size");
  +    }
  +
  +    tabWidth = int.parse(value);
  +    if (tabWidth.toString() != value || tabWidth < 1) {
  +      throw new EditorConfigException.forProperty("tab_width", value);
  +    }
  +
  +    // indent_size
  +    value = _context.getValue("indent_size");
  +    if (value == "tab") {
  +      indentSize = tabWidth;
  +    } else {
  +      indentSize = int.parse(value);
  +      if (indentSize.toString() != value || indentSize < 1) {
  +        throw new EditorConfigException.forProperty("indent_size", value);
  +      }
  +    }
  +
  +    // end_of_line
  +    value = _context.getValue("end_of_line");
  +    if (value == "cr") {
  +      lineEnding = ENDING_CR;
  +    } else if (value == "lf") {
  +      lineEnding = ENDING_LF;
  +    } else if (value == "crlf") {
  +      lineEnding = ENDING_CRLF;
  +    } else {
  +      throw new EditorConfigException.forProperty("end_of_line", value);
  +    }
  +
  +    // charset
  +    value = _context.getValue("charset");
  +    if (value == "latin1") {
  +      charSet = CHARSET_LATIN;
  +    } else if (value == "utf-8") {
  +      charSet = CHARSET_UTF8;
  +    } else if (value == "utf-8-bom") {
  +      charSet = CHARSET_UTF8BOM;
  +    } else if (value == "utf-16be") {
  +      charSet = CHARSET_UTF16BE;
  +    } else if (value == "utf-16le") {
  +      charSet = CHARSET_UTF16LE;
  +    } else {
  +      throw new EditorConfigException.forProperty("charset", value);
  +    }
  +
  +    // trim_trailing_whitespace
  +    trimWhitespace = _propertyToBool("trim_trailing_whitespace");
  +
  +    // insert_final_newline
  +    insertFinalNewline = _propertyToBool("insert_final_newline");
  +  }
  +
  +  bool _propertyToBool(String propertyName,
         {String trueValue: "true", String falseValue: "false"}) {
  -    String value = matcher.getValue(propertyName);
  +    String value = _context.getValue(propertyName);
   
       if (value == trueValue) {
         return true;
  
positive.code:     glob = new Glob(sectionId);
    }
  
    bool matchesPath(String path) {
      return (glob.matchPath(path) == Glob.COMPLETE_MATCH);
    }
  
    String getValue(String propertyName) {
  
negative.code:     }).then((String configContent) {
        new ConfigFile(configContent).sections.forEach(
            (ConfigSection section) {
          var fullPath = entry.fullPath;
          if (section.matchesPrefix(fullPath)) {
            configSections.insert(insertIndex, section);
          }
        });
  
        if (container.project.entry.fullPath != dir.fullPath) {
          return dir.getParent();
        }
      }).then((chrome.DirectoryEntry parent) {
        if (parent != null) {
          return _getSections(parent);
        }
      });
    }
  }
  
  