nrwl / precise-commits

:sparkles: Painlessly apply Prettier by only formatting lines you have modified anyway!
MIT License
471 stars 20 forks source link

JavaScript file ends up malformed after running precise-commits #31

Open andyexeter opened 5 years ago

andyexeter commented 5 years ago

When I enter the following code into the Prettier playground it formats correctly:

Click to expand ```js "use strict"; var PLUGIN_NAME = "groupRequiredTest"; Plugin.prototype = { /** * Returns the plugin instance's options object. * * @returns {object} */ getOptions: function () { return this.options; }, /** * Destroys the plugin instance. * * @returns {jQuery} */ destroy: function () { // Reset each element's 'required' attribute. this.$els.each(function () { var origRequired = $(this).data("origRequired." + PLUGIN_NAME); if (origRequired) { $(this).attr("required", origRequired); } else { $(this).removeAttr("required"); } }); // Remove all events and data added by the plugin. return this.$els .off("." + this.options.namespace) .removeData([ PLUGIN_NAME + ".plugin", "origRequired." + PLUGIN_NAME ]); } }; /** * * @param {jQuery} $elements * @param {Object} options * @constructor */ function Plugin($elements, options) { this.$els = $elements; this.options = $.extend({}, $.fn[PLUGIN_NAME].defaults, options); var _this = this; this.$els .each(function () { $(this).data( "origRequired." + PLUGIN_NAME, $(this).attr("required") ); setRequired.call(_this, $(this)); }) .on("input." + this.options.namespace + " change." + this.options.namespace, function (event) { setRequired.call(_this, $(this), event); } ) .on("invalid." + this.options.namespace, function (event) { var errorMessage = _this.options.errorMessage; if ($.isFunction(errorMessage)) { errorMessage = errorMessage.call(this, _this, event); } this.setCustomValidity(errorMessage); }); } /** * Sets the required property of all other elements in the group based on the value of the given * element and the custom required filter function. * * Used as a handler for the 'input' event AND to initialise the plugin. * * @param {jQuery} $element * @param {jQuery.Event} [event] */ function setRequired($element, event) { /* jshint validthis: true */ var required = true; this.$els.each(function () { this.setCustomValidity(""); required = required && !this.checkValidity(); }); if (this.options.requiredFilter) { required = this.options.requiredFilter.call( $element, required, this, event ); } this.$els.prop("required", required); } $.fn[PLUGIN_NAME] = function (options) { var plugin = this.data(PLUGIN_NAME + ".plugin"); if (!plugin) { plugin = new Plugin(this, options); this.data(PLUGIN_NAME + ".plugin", plugin); } if ($.isFunction(Plugin.prototype[options])) { return plugin[options].apply( plugin, Array.prototype.slice.call(arguments, 1) ); } return this; }; $.fn[PLUGIN_NAME].defaults = { namespace: "groupRequired", requiredFilter: null, errorMessage: "" }; ```

However, when I run precise-commits it ends up malformed:

Click to expand ```js "use strict"; var PLUGIN_NAME = "groupRequired"; Plugin.prototype = { /** * Returns the plugin instance's options object. * @returns {object} */ getOptions: function() { return this.options; }, /* * Destroys the plugin instance. * * @returns {jQuery} * destroy: function() { // Reset each element's 'required' attribute. this.$els.each(function() { var origRequired = $(this).data( "origRequired." + PLUGIN_NAME ); (origRequired) { $(this).attr("required", origRequired); } else { $(this).removeAttr("required"); ; // Remove all events and data added by the plugin. return this.$els .off("." + this.options.namespace) .removeData([PLUGIN_NAME + ".plugin", "origRequired." + PLUGIN_NAME]); } }; /** * * @param {jQuery} $elements * @param {Object} options * @constructor */ function Plugin($elements, options) { this.$els = $elements; this.options = $.extend({}, $.fn[PLUGIN_NAME].defaults, options); var _this = this; this.$els .each(function() { $(this).data( "origRequired." + PLUGIN_NAME, $(this).attr("required") setRequired.call(_this, $(this)); }) .on( "input." + this.options.namespace + " change." + this.options.namespace, functi(event) { setRequired.call(_this, $(this), event); } ) .on("invalid." + this.options.namespace, function(event) { var errorMessage = _this.options.errorMessage; if ($.isFunction(errorMessage)) { errorMessage = errorMessage.call(this, _this, event); } this.setCustomValidity(errorMessage); }); } /** * Sets the required property of all other elements in the group based on the value of the given * element and the custom required filter function. * * Used as a handler for the 'input' event AND to initialise the plugin. * * @param {jQuery} $element * @param {jQuery.Event} [event] */ function setRequired($element, event) { /* jshint validthis: true */ var required = true; this.$els.each(function() { this.setCustomValidity(""); required = required && !this.checkValidity(); }); if (this.options.requiredFilter) { required = this.options.requiredFilter.call( $element, required, this, event ); } this.$els.prop("required", required); } $.fn[PLUGIN_NAME] = function(options) { var plugin = this.data(PLUGIN_NAME + ".plugin"); if (!plugin) { plugin = new Plugin(this, options); this.data(PLUGIN_NAME + ".plugin", plugin); } if ($.isFunction(Plugin.prototype[options])) { return plugin[options].apply( plugin, Array.prototype.slice.call(arguments, 1) ); } return this; }; $.fn[PLUGIN_NAME].defaults = { namespace: "groupRequired", requiredFilter: null, errorMessage: "" }; ```

I'm aware precise-commits runs on changed lines, so the diff for the file is as follows:

diff --git a/src/plugin.js b/src/plugin.js
index 8c39844..1a37eb4 100644
--- a/src/plugin.js
+++ b/src/plugin.js
@@ -8,7 +8,7 @@ Plugin.prototype = {
      *
      * @returns {object}
      */
-    getOptions: function() {
+    getOptions: function () {
         return this.options;
     },

@@ -17,9 +17,9 @@ Plugin.prototype = {
      *
      * @returns {jQuery}
      */
-    destroy: function() {
+    destroy: function () {
         // Reset each element's 'required' attribute.
-        this.$els.each(function() {
+        this.$els.each(function () {
             var origRequired = $(this).data("origRequired." + PLUGIN_NAME);

             if (origRequired) {
@@ -52,7 +52,7 @@ function Plugin($elements, options) {
     var _this = this;

     this.$els
-        .each(function() {
+        .each(function () {
             $(this).data(
                 "origRequired." + PLUGIN_NAME,
                 $(this).attr("required")
@@ -61,14 +61,14 @@ function Plugin($elements, options) {
         })
         .on(
             "input." +
-                this.options.namespace +
-                " change." +
-                this.options.namespace,
-            function(event) {
+            this.options.namespace +
+            " change." +
+            this.options.namespace,
+            function (event) {
                 setRequired.call(_this, $(this), event);
             }
         )
-        .on("invalid." + this.options.namespace, function(event) {
+        .on("invalid." + this.options.namespace, function (event) {
             var errorMessage = _this.options.errorMessage;

             if ($.isFunction(errorMessage)) {
@@ -93,7 +93,7 @@ function setRequired($element, event) {

     var required = true;

-    this.$els.each(function() {
+    this.$els.each(function () {
         this.setCustomValidity("");
         required = required && !this.checkValidity();
     });
@@ -110,7 +110,7 @@ function setRequired($element, event) {
     this.$els.prop("required", required);
 }

-$.fn[PLUGIN_NAME] = function(options) {
+$.fn[PLUGIN_NAME] = function (options) {
     var plugin = this.data(PLUGIN_NAME + ".plugin");

     if (!plugin) {
rahulbhadhoriya commented 4 years ago

anyone found any solution for this?