code: def compileFeatures(
      ufo,
      ttFont=None,
      glyphSet=None,
      featureWriters=None,
      featureCompilerClass=None,
  ):
      
      if featureCompilerClass is None:
          if any(
              fn.startswith(MTI_FEATURES_PREFIX) and fn.endswith(".mti")
              for fn in ufo.data.fileNames
          ):
              featureCompilerClass = MtiFeatureCompiler
          else:
              featureCompilerClass = FeatureCompiler
      featureCompiler = featureCompilerClass(
          ufo, ttFont, glyphSet=glyphSet, featureWriters=featureWriters
      )
      return featureCompiler.compile()
docs: Compile OpenType Layout features from `ufo` into FontTools OTL tables.
      If `ttFont` is None, a new TTFont object is created containing the new
      tables, else the provided `ttFont` is updated with the new tables.
  
      If no explicit `featureCompilerClass` is provided, the one used will
      depend on whether the ufo contains any MTI feature files in its 'data'
      directory (thus the `MTIFeatureCompiler` is used) or not (then the
      default FeatureCompiler for Adobe FDK features is used).
  
      If skipExportGlyphs is provided (see description in the ``compile*``
      functions), the feature compiler will prune groups (removing them if empty)
      and kerning of the UFO of these glyphs. The feature file is left untouched.